Необходима базовая помощь по SQLite в C# - возвращение строк или целых чисел из запроса

Я использую Microsoft Visual C# 2008 Express Edition с SqlLite. Я успешно могу открыть свою базу данных и с помощью кода C# добавить записи в мои таблицы.

Когда дело доходит до извлечения данных, у меня возникают некоторые проблемы, и я искал и искал в Интернете основную учебную информацию о том, как сделать эти основные вещи...

Вот мой код... (после того, как я открыл соединение с базой данных, которая называется здесь "conn"):

SQLiteCommand cmd = new SQLiteCommand(conn);
cmd.CommandText = "select myField1,myField2 from myTable where myField3 = '" + tempstring + "';";
cmd.CommandType = CommandType.Text;
SQLiteDataReader reader = cmd.ExecuteReader();

while (reader.Read())
{
  string tmp = reader.GetString(0);
  System.Console.WriteLine(" my output = " + tmp);
}

Когда я выполняю это... я не получаю ошибок, и поскольку я не получаю вывод в этой последней строке, похоже, что цикл while не выполняется вообще.

Я новичок в этом деле... что мне не хватает и есть ли хороший веб-ресурс, где я могу изучить эти основные вещи? Я довольно удобен в SQL сам по себе... просто не интегрирован в C#, как это...

5 ответов

Сначала удалите вредную точку с запятой из строки while (reader.Read());...!

Это выглядит правильно для меня. Есть ли в собственности reader.HasRows вернуть true для вашего запроса?

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

  1. Обязательно утилизируйте свои ресурсы SQL, заключив их в блоки { }.
  2. Попробуйте использовать параметризованные запросы вместо введения параметра запроса непосредственно в операторе SELECT.

Отвечая на ваш вопрос о том, как писать параметризованные запросы:

cmd.CommandText = "select myField1,myField2 from myTable where myField3 = @tempString;";
SQLiteParameter param = new SQLiteParameter("@tempString");
cmd.Parameters.Add(param);

// you can modify that value without touching the sql statement (which means you could cache the above command)
param.Value = tempstring;
SQLiteDataReader reader = cmd.ExecuteReader();
[...]

Параметры в SQLite могут иметь несколько форм, которые вы можете найти здесь.

Смотрите здесь для получения дополнительной информации о параметризованных запросах.

Хорошо, Алекс.

В дополнение к этому, так как вы начинаете с sqlite (вы можете захотеть удалить вторую букву L из тега), помните, что sqlite на самом деле не гарантирует безопасность типов данных на уровне базы данных.

Не для того, чтобы отвлечь вас от вопроса о Sqlite, но если у вас возникли проблемы с удобством запросов Sqlite, встроенных в C#, вы можете попробовать NHibernate в сочетании с Fluent NHibernate. Эти технологии обеспечивают превосходный механизм доступа к данным в базах данных, включая Sqlite.

Запросы NHibernate в Sqlite выполняются очень быстро, и вам не придется беспокоиться о некоторых особенностях Sqlite. Если вы правильно построите свой уровень доступа к данным с помощью NHibernate, вы сможете очень быстро перейти на более надежную базу данных.

Другие вопросы по тегам