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

Я использую 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 ]

5 голосов
/ 24 мая 2009

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

2 голосов
/ 24 мая 2009

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

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

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

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

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 могут иметь несколько форм, которые вы можете найти здесь .

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

0 голосов
/ 24 мая 2009

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

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

0 голосов
/ 24 мая 2009

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

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

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