【发布时间】:2016-03-29 19:36:11
【问题描述】:
我在 Unity 中使用 SQLite,但在从我拥有的表加载数据时遇到问题,该表由游戏在开始屏幕生成。我没有收到任何错误,我的“reader.HasRows”调用确实返回了。但是,当我尝试将数据加载到 DataTable 中时,我什么也得不到。我以前使用过 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 循环经过了正确的次数,但它没有返回任何内容。我是否需要管理来自数据库的数据类型?
【问题讨论】:
-
Application.dataPath 的值是多少?你检查你是否正在查询正确的数据库?
-
将路径与文件名组合时,使用 Path.Combine()。它将处理任何 [可能丢失的] 反斜杠。
-
我认为我们需要查看您的 Scores.Load 方法,因为这里的其他方法似乎很好。另外,当您调试 if 语句时,您会看到什么?您可以轻松查看行,这将确定您是否正确获取记录。
-
作为旁注,您将包装在
using中,因此您无需输入dbCon.Close()- 这将自动发生;也不需要一开始就检查 - 它不会打开。 -
我假设 Scores 是一个数据表,因此 Scores.Load(reader) 使用阅读器加载数据表....