我正在连接到一个SQL Server 2012数据库,并根据ID查询单个值。(值得一提的是,这个数据库位于另一个大陆的服务器上,因此延迟非常高。大约在100毫秒左右)。
查询似乎成功执行。SqlDataReader对象的HasRows属性被设置为true,因此我尝试使用该值来分配变量。当我正常运行程序时,遇到了一个异常,其消息为“'Given key was not present in the dictionary'”。如果我停止执行并检查SqlDataReader对象,并枚举结果。首先我被告知“'enumeration yielded no results'”,然后当我继续执行时,我会收到一个不同的异常,其消息为“'invalid attempt to read when no data is present'”
以下是相关代码:
SqlConnection sql_conn = new SqlConnection(ConnectionString);
SqlCommand sql_cmd = new SqlCommand(String.Format("select ItemType from ItemTable where ItemID='{0}'", item_id), sql_conn);
Console.WriteLine(sql_cmd.CommandText);
sql_conn.Open();
SqlDataReader rdr = sql_cmd.ExecuteReader();
rdr.Read();
if (rdr.HasRows) //True
{
item_type= TypesMap[rdr["ItemType"].ToString()]; //Either 'given key not found in dictionary' or 'invalid attempt to read when no data is present'
}
我已经在SQL Server Management Studio中执行了SQL语句,执行成功。我尝试在C#代码中将ItemID硬编码到语句中,但是仍然存在相同的错误。
我该如何进行调试?看起来一切都很正常,直到我尝试访问查询结果时出现问题。
HasRows
检查是否有任何行,然后使用Read
将读取器推进到下一条记录。 - Tim Schmelterreader.HasRows
并实现以下逻辑:if (reader.Read()) { item_type= TypesMap[rdr["ItemType"].ToString()]; }
- Nino