c# - DataTable.Load() 未从 ExecuteReader() 获取数据

标签 c# unity-game-engine sqlite mono

我正在 Unity 中使用 SQLite,但在从游戏在开始屏幕生成的表中加载数据时遇到问题。我没有收到任何错误,并且我的“reader.HasRows”调用确实返回了 true。但是,当我尝试将数据加载到数据表中时,我什么也没得到。我之前曾将 SQLite 与 C# 一起使用,并使用该代码作为引用,但我以前从未遇到过类似的问题。

ScoreControl.cs:

using (SqliteConnection dbCon = new SqliteConnection("Data Source=" + Application.dataPath + "MainScoreDB.sqlite3"))
{
    if (dbCon.State != ConnectionState.Open)
        dbCon.Open();
    string query = "SELECT * FROM highscores";

    SqliteCommand command = new SqliteCommand(query, dbCon);
    SqliteDataReader reader = command.ExecuteReader();

    if(reader.HasRows)
    {
        Scores.Load(reader);
    }
    else
    {
        Debug.Log("No Data was Returned");
    }


    if (dbCon.State == ConnectionState.Open)
        dbCon.Close();
}

else 语句永远不会被触发,因此读者肯定会得到一些东西。我在这里不知所措,我尝试了多种格式的数据库(s3db、sqlite、sqlite3),但都有相同的结果。我也没有收到任何错误。

编辑

Application.dataPath 指的是根项目文件夹,我用它来生成数据库和表,并引用它,这样我就知道它正在查询正确的数据库,我还创建了一个没有表的数据库并收到错误,所以我知道它正在访问数据库。

Scores.Load() 是 DataTable 中的一个方法,它加载输入从阅读器返回的数据。

因此, while 循环似乎执行了正确的次数,但它没有返回任何内容。我是否需要管理来自数据库的数据类型?

最佳答案

我认为您忘记在数据读取器上调用 Read 。在读取第一行之前,光标位于开头。尝试执行 while 循环来遍历所有行,因为 Reader 是仅向前移动的对象。

 if (reader.HasRows)  
 {    
    while (reader.Read())    
    { 
         // Load each row 1 at a time here    
    }  
 }

引用:

https://www.devart.com/dotconnect/sqlite/docs/Devart.Data.SQLite~Devart.Data.SQLite.SQLiteDataReader~HasRows.html

编辑

尝试一下数据适配器,看看它是否表现得更好,或者为您提供有关问题所在的另一条线索。

SQLiteDataAdapter da = new SQLiteDataAdapter(dbCommand);
da.Fill(scores);

关于c# - DataTable.Load() 未从 ExecuteReader() 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36293588/

相关文章:

c# - 将字符串转换为时间

c# - 为什么要使用 SerializeField?

c# - Unity2D 拍摄对象随角色转动但不应该转动

objective-c - 检查sqlite列类型

Android SQLite - 是否可以检索按周/月分组的数据?

c# - 无法获取页面的 HTML

c# - 将 C/C++ #if 和 #elif 指令转换为 C#

python - 使用 NATURAL JOIN 的 sqlite 查询会产生额外的记录

c# - AES 256 Nodejs 加密和在 C#.Net 中解密

colors - 在运行时更改文本颜色(Unity)?