我連接到SQL Server 2012數據庫以基於ID查詢單個值。 (值得一提的是,這個數據庫位於我的開發機器的另一個大陸的服務器上,因此延遲時間非常長,大約在100ms左右)。SqlDataReader HasRows = True,但沒有數據
查詢似乎成功執行。 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語句執行它是成功的。我已經嘗試將一個ItemID硬編碼到C#代碼中的語句中,並且存在相同的錯誤。
我還能做些什麼來調試呢?一切似乎都沒問題,直到我嘗試訪問查詢的結果。
不會導致這個問題**但**:我會顛倒順序,首先使用'HasRows'來檢查是否有任何行,然後使用'Read'將讀取器推進到下一個記錄。 –
這兩個錯誤消息是由兩種完全不同的情況造成的。用這段代碼收到的是什麼? – Steve
我會跳過reader.HasRows並執行邏輯,如 'if(reader.Read()){item_type = TypesMap [rdr [「ItemType」]。ToString()]; }' – Nino