база данных sqlite не возвращает результаты - PullRequest
0 голосов
/ 02 сентября 2011

Почему мой запрос не возвращает результаты?Я использую C #.Возвращает заголовки столбцов, но без строк.Есть ли проблема с моим оператором select?

вот мой код:

conn = new SQLiteConnection("Data Source=local.db;Version=3;New=False;Compress=True;");
DataTable data = new DataTable();
SQLiteDataReader reader;
using (SQLiteTransaction trans = conn.BeginTransaction())
{
    using (SQLiteCommand mycommand = new SQLiteCommand(conn))
    {
        mycommand.CommandText = "SELECT * FROM TAGTABLE WHERE TAG = '"+tag+"' ;";
        reader = mycommand.ExecuteReader();
    }
    trans.Commit();
    data.Load(reader);
    reader.Close();
    reader.Dispose();
    trans.Dispose();
}
return data;

* TAGTABLE имеет следующие поля:

TID int,
Tag varchar(500),
FilePath varchar(1000)

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

Вам не нужна транзакция, попробуйте следующее:

    DataTable data = new DataTable();

    using (SQLiteConnection conn = new SQLiteConnection("Data Source=local.db;Version=3;New=False;Compress=True;"))
    using (SQLiteCommand mycommand = new SQLiteCommand(conn))
    {
        mycommand.CommandText = "SELECT * FROM TAGTABLE WHERE TAG = @tag;";
        mycommand.Parameters.AddWithValue("@tag", tag);
        conn.Open();

        using (SQLiteDataReader reader = mycommand.ExecuteReader())
        {
            data.Load(reader);  
        }
    }

    return data;

Наиболее вероятная причина, по которой это ничего не даст, в том, что SELECT не дает никаких результатов.

Также обратите внимание, что все, что реализует интерфейс IDisposable, может использоваться вместе с оператором using, поэтому ручное закрытие / удаление объектов впоследствии не требуется.

Обратите внимание, что SQL изменился для использования параметризованного запроса, это поможет снизить вероятность атак с использованием SQL-инъекций и, как правило, более понятен.

0 голосов
/ 02 сентября 2011

Поскольку вы не показываете пример данных и то, что следует повторно использовать, только некоторые общие указатели:

  • Способ создания SQL-кода широко открыт для внедрения SQL-кода (серьезная проблема безопасности)
  • В зависимости от значения tag (например, если оно содержит '), вышеприведенный оператор SQL будет делать то, чего вы не ожидаете
  • , поскольку в using есть всехорошо!) вопрос в том, есть ли какое-то исключение, которое выдается внутри блока using (проверьте с помощью отладчика)
  • почему вы используете транзакцию?Я не вижу никакой причины, которая делает это необходимым ...

Пожалуйста, покажите некоторые примеры данных со значением параметра и ожидаемым результатом ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...