gpt4 book ai didi

c# - SQLiteDataReader.read() 清空结果?

转载 作者:太空宇宙 更新时间:2023-11-03 21:58:42 25 4
gpt4 key购买 nike

我的 C# 类中有一个方法可以从 SQLite 数据库调用单个结果。我的数据库连接成功打开,但在不同的地方运行断点后,我发现了一些奇怪的事情。这是我的代码:

Dictionary<string, string> getResult(string id)
{
dataConn.Open();
SQLiteCommand comm = dataConn.CreateCommand();
comm.CommandText = "SELECT * FROM [tableName] WHERE id='" + id + "'";
SQLiteDataReader result = comm.ExecuteReader();
Dictionary<string, string> resultDict = new Dictionary<string, string>();

/*
This doesn't work.
while(result.Read())
{
resultDict.Add(result.GetName(0), result.GetString(0));
}
*/

result.Read();
for (int i = 0; i < result.FieldCount; i++)
{
resultDict.Add(result.GetName(i), result.GetString(i));
}
result.Dispose();
comm.Dispose();
dataConn.Close();
return resultDict;
}

我知道我可以使用 SQLiteParameters 而不是内联连接,但出于某种原因,它们破坏了我的查询。

在我的第一个循环中,如果我在它开始之前放置一个断点,我可以看到我的查询返回了一个结果,这正是我需要的。但是,当我进入我的循环时,在我执行除 reader.Read() 之外的任何代码之前,VS2010 会提示“Enumeration yielded no results”。但他们片刻之前就在那里?

所以,我尝试了第二个循环。执行 reader.Read(),然后循环返回的字段。当我这样做时,VS2010 抛出错误“未选择当前行”。

我对此完全迷失了,我不知道出了什么问题,因为其他数据库文件的其余 SQLite 连接工作正常。我已经在 SQLite Administrator 中测试了我的查询,我的查询执行得非常好。我的目标是最终得到一个字典,其中键是字段的名称,值是所述字段的结果。关于什么是错误的任何想法?或者,在修复代码的过程中,有什么方法可以使代码更简单吗?

最佳答案

已解决。出于某种原因,使用 .GetString(0).GetString(i) 会破坏它。但是,当我将其转换为 .GetValue(0).ToString() 时,它运行良好。我不知道为什么会这样,这超出了我的理解范围,但它确实有效。

关于c# - SQLiteDataReader.read() 清空结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11174654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com