-1

目前功能是基本的。我可以相当简单地添加行,当我这样做时我更新了一个列表框,但是如果我删除一行,或者在没有初始行的情况下启动程序(来自插入查询),SQLiteDataReader 会抛出这个异常:

Object reference not set to an instance of an object.

它非常奇特,如果我在没有初始行(在创建数据库时添加)的情况下启动程序,就会引发错误。每次我启动程序并且数据库不是新创建的时候,它也会发生。如果我创建数据库,关闭程序,重新打开程序并连接到数据库,阅读器会给出该错误。

这是一些代码。

    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();

可能值得注意的是,如果表刚刚创建,查询工作正常。只有在删除了一行,或者程序在没有创建新数据库的情况下重新启动时才会弹出此错误。似乎无法理解它为什么这样做。看起来不太合乎逻辑,但我想这是一个愚蠢的错误。

所有帮助表示赞赏。

参考:使用 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 回答