Sqllite SQLiteDataReader возвращает enpty reader, а SQLiteDataAdapter возвращает правильный результат - PullRequest
0 голосов
/ 29 июня 2018

У меня проблемы с Sqllite SQLiteDataReader. Используя ту же строку подключения и тот же оператор SQL, SQLiteDataReader возвращает пустое устройство чтения, а SQLiteDataAdapter возвращает подозрительную запись.

В этом случае я пытаюсь получить запись с наибольшим значением в поле Id. База данных содержит несколько записей с уникальными значениями в поле Id, но возвращаемое значение для чтения будет пустым при использовании SQLiteDataReader. Когда я использую ту же строку подключения и оператор SQL с SQLiteDataAdapter, появляются подозрительные результаты Я предоставляю часть статического класса, который я использую для связи с базой данных. Метод SenasteBokning, использующий SQLiteDataReader, не работает. Метод SenasteBokning2, использующий SQLiteDataAdapter, работает идеально. Что не так с методом SenasteBokning?

Я использую: Windows 10 Visual Studio 2017 .net framework 4.5.2 (был по умолчанию при создании приложения Windows Forms) Пакет Nuget System.Data.SQLite.Core 1.0.108

static class Databas
{
    private static string appPath =     Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    private static string dbPath = @"\BokningarConvention.db";
    private static string connectionString = "Data Source= " + appPath + dbPath;
    private static SQLiteConnection con;
    private static SQLiteCommand cmd;
    private static SQLiteDataReader reader;
    private static SQLiteDataAdapter adapter;
    private static SQLiteCommandBuilder commandBuilder;
    private static DataTable table; 
    private static string senaste = "SELECT Nummer, NrSammaDag, Datum FROM Bekraftelser WHERE Id = (SELECT MAX (Id) FROM  Bekraftelser)";

    // This don't work
    public static Bokning SenasteBokning()
    {
        Bokning bokning = new Bokning();

        using (SQLiteConnection con2 = new SQLiteConnection(connectionString))
        {
            con2.Open();
            SQLiteCommand cmd2 = new SQLiteCommand(senaste, con2);

            SQLiteDataReader reader2 = cmd2.ExecuteReader();

            // Here the reader is empty
            while (reader2.Read())
            {
                // Error at first read
                // should handle results the same way as in SenasteBokning2
                // removed during testing
            }
        }

        return bokning;
    }


    //This works perfekt
    public static Bokning SenasteBokning2()
    {
        Bokning bokning = new Bokning();
        using (SQLiteConnection db = new SQLiteConnection(connectionString))
        {
            adapter = new SQLiteDataAdapter(senaste, connectionString);
            commandBuilder = new SQLiteCommandBuilder(adapter);
            table = new DataTable();
            db.Open();
            adapter.Fill(table);

            foreach (DataRow row in table.Rows)
            {
                int nummer;
                int samma;
                DateTime datum;
                nummer = (int)((long)row["Nummer"]);
                datum = Verktyg.FromDateInteger((int)((long)row["Datum"]));

                if (!row.IsNull("NrSammaDag"))
                {
                    samma = (int)((long)row["NrSammaDag"]);
                    bokning = new Bokning(nummer, samma, datum);
                }
                else
                {
                    bokning = new Bokning(nummer, datum);
                } 
            }
        }
        return bokning;           
    }        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...