繁体   English   中英

DataTable.Load() 没有从 ExecuteReader() 获取数据

[英]DataTable.Load() not getting data from ExecuteReader()

我正在 Unity 中使用 SQLite,并且在从游戏在开始屏幕生成的表中加载数据时遇到问题。 我没有收到任何错误,我的“reader.HasRows”调用确实恢复原状。 但是,当我尝试将数据加载到 DataTable 中时,我一无所获。 我之前在 C# 中使用过 SQLite,并且正在使用该代码作为参考,但我以前从未遇到过这样的问题。

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

我遇到了类似的问题,

除了我的是,出于某种原因,DataTable 根本没有收到它所欠的所有行。

为 SqlLite 填充 DataTable 的正确方法似乎是:

DataTable dt = new DataTable();
SQLiteConnection cnn = new SQLiteConnection(dbConnection);
cnn.Open();
SQLiteCommand mycommand = new SQLiteCommand(cnn);
mycommand.CommandText = sql;
SQLiteDataAdapter adapter = new SQLiteDataAdapter(mycommand);
adapter.Fill(dt);
cnn.Close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM