SqlDataReader 的 Read() 函数 returns 空行,来自数据库浏览器的相同查询 returns 值

SqlDataReader's Read() function returns empty row, same query returns value from database browser

我在 SQLite 中有一个 table 结构如下:

+-------+------+------+
| id    |name  |value |
|int    |text  |int   |
+-------+------+------+

我正在尝试按照 this guide 在 Unity 中使用 sqlite 数据库。我可以使用以下代码查询 sqlite_master table 以检索唯一的数据库 table 名称:

    _dbConnection = (IDbConnection)new SqliteConnection(_dbURI);
    _dbConnection.Open();
    string sqlStatement = "SELECT name FROM sqlite_master WHERE type='table' AND name='" + tableName + "';";
    _dbCommand = _dbConnection.CreateCommand();
    _dbCommand.CommandText = sqlStatement;
    _dbReader = _dbCommand.ExecuteReader();
    while (_dbReader.Read())
    {
        Debug.Log("Table: " + _dbReader.GetString(0));
    }

但是,当我尝试使用类似代码从 table 本身查询以获取最大 ID 时,我的 DataReader returns 一个空行:

    _dbConnection = (IDbConnection)new SqliteConnection(_dbURI);
    _dbConnection.Open();
    string sqlStatement = "SELECT max(id) FROM " + tableName + ";";
    _dbCommand = _dbConnection.CreateCommand();
    _dbCommand.CommandText = sqlStatement;
    _dbReader = _dbCommand.ExecuteReader();
    while (_dbReader.Read())
    {
        Debug.Log("MaxId = " + _dbReader.GetInt32(0));
    }

null 导致调用 _dbReader.GetInt32(0) 时发生转换错误。当我将 sql 语句写入日志并将其粘贴到我的数据库浏览器中时,它会生成一个数字,因此查询应该返回一个值。

我不清楚为什么类似的代码在查询 sqlite_master 而不是我的其他 table.

时有效

我也试过 ExecuteScalar 但没有成功。

谢谢!

编辑:

InvalidCastException: Cannot cast from source type to destination type. Mono.Data.Sqlite.SqliteDataReader.VerifyType (Int32 i, DbType typ)

此外,奇怪的是,由于某种原因,更改代码弄乱了我编辑器中的 GUI 元素。

我解决了这个问题,希望这个回答对其他人有帮助:

这个问题很难解决,因为

  • 引用了正确的数据库
  • 所有代码都是正确的
  • 当 运行 在我的数据库浏览器中
  • 时,sql 查询得到了 return 结果

问题是我正在使用 DB Browser for Sqlite,这是我的新手。我已经将数据行写入数据库,以便我的查询在浏览器中得到 return 结果,但显然这些更改不会写入数据库文件供其他应用程序查看,直到按下 "Write Changes" 按钮.

希望这对可能不熟悉 db 浏览器并遇到此错误的其他人有所帮助!