Простой запрос SQLite не работает

#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’ в ваш реальный тип при компиляции. И да, я закрыл соединение в своем «реальном» коде.