-1

機能は現時点では基本的なものです。私はかなり簡単に行を追加することができ、そうするとリストボックスを更新しますが、行を削除するか、最初の行なしでプログラムを開始すると (Insert Query から)、SQLiteDataReader はこの例外をスローします:

Object reference not set to an instance of an object.

それは非常に独特で、最初の行 (DB の作成時に追加される) なしでプログラムを開始するとスローされるエラーです。また、プログラムを起動するたびに発生し、DB が新しく作成されません。DBを作成し、プログラムを閉じ、プログラムを再度開いてDBに接続すると、リーダーはそのエラーを出します。

ここにいくつかのコードがあります。

    SQLiteConnection db = new SQLiteConnection("Data Source=test.sqlite;Version=3;");
    SQLiteCommand cmd;
    query = "SELECT * FROM Table";
    db.Open();

    SQLiteDataReader reader = cmd.ExecuteReader(); //This is the line that throws
    while (reader.Read())
    {
       //read and do work. (This section has been tested and works 
    }
    reader.Close()
    db.Close();

テーブルが作成されたばかりの場合、クエリは正常に機能することに注意してください。行が削除された場合、またはこのエラーがポップアップするのは、DB を新たに作成せずにプログラムを再起動した場合のみです。なぜそれをしているのかわからないようです。あまり論理的ではないように見えますが、愚かなバグだと思います。

すべての助けに感謝します。

参照: System.Data.SQLite.dll の使用

4

2 に答える 2

2

cmd を初期化することはありません。ヌルです。

試す

query = "SELECT * FROM Table";
SQLiteCommand cmd = new SQLiteCommand(query, db);
于 2013-02-20T18:31:18.150 に答える
2

をインスタンス化しませんでしたcmd

SQLiteConnection db = new SQLiteConnection("Data Source=test.sqlite;Version=3;");
    SQLiteCommand cmd = db.CreateCommand();
    cmd.CommandType = CommandType.Text;
    query = "SELECT * FROM Table";
    command.CommandText = query;
    db.Open();

    SQLiteDataReader reader = cmd.ExecuteReader(); //This is the line that throws
    while (reader.Read())
    {
       //read and do work. (This section has been tested and works 
    }
    reader.Close()
    db.Close();
于 2013-02-20T18:32:18.267 に答える