#c# #.net #sql #sqlite
#c# #.net #sql #sqlite
Вопрос:
Я использую sqlite compact edition, я выполнил несколько тестов с помощью linqdpad, все работало нормально. Но когда я перехожу к C # code, это не работает. Я попытался получить поля из базы данных с помощью следующего кода:
using System;
using System.Data.SqlServerCe;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var conStr = @"data source=C:pathdb.sdf;password=...";
var con = new SqlCeConnection(conStr);
con.Open();
var cmd = new SqlCeCommand("select * from quest", con);
SqlCeDataReader result = cmd.ExecuteReader();
Console.Write(result.Read());
Console.ReadLine();
con.Close();
}
}
}
result.Read()
ВОЗВРАТ false
. как если бы не было полей. как это исправить?
Используя linqpad, я вижу что-то вроде:
запрос:
select * from quest;
Обновить
Проблема возникает, когда база данных (.sdf) использует пароль.
Комментарии:
1. Надеюсь, вы закрываете соединение в коде ниже этого. Рассмотрите возможность использования
using
для этого. Не могли бы вы, пожалуйста, опубликовать запрос linqpad, который вы используете, чтобы получить опубликованные вами результаты.2. @AdamWenger: Добавлен полный код. и запрос / вывод linqpad.
Ответ №1:
проверьте точку с запятой в конце вашего запроса. возможно, удалив его, ваш запрос будет выполнен правильно. с другой стороны, в целом все правильно.
Ответ №2:
Для меня это выглядит нормально — может быть, это:
var result
Измените его на SqlCeDataReader. Это единственная «ошибка», которую я вижу.
Также не забудьте закрыть соединение после того, как закончите.
Комментарии:
1. Я думаю, что проблема не здесь. По сути, компилятор преобразует ‘var’ в ваш реальный тип при компиляции. И да, я закрыл соединение в своем «реальном» коде.