我的 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 会说“枚举没有产生任何结果”。但他们之前就在那里?
所以,我尝试了第二个循环。执行reader.Read()
,然后循环返回的字段。当我这样做时,VS2010 会抛出错误“没有选择当前行。”。
我对此完全迷失了,我不知道出了什么问题,因为我与其他数据库文件的其余 SQLite 连接工作正常。我已经在 中测试了我的查询SQLite Administrator
,并且我的查询执行得非常好。我的目标是最终得到一个字典,其中键是字段的名称,值是所述字段的结果。关于有什么问题的任何想法?或者,在修复它的过程中,有没有办法让这段代码更简单?