Я подключаюсь к базе данных SQL Server 2012, чтобы запросить одно значение на основе идентификатора. (Возможно, стоит упомянуть, что эта база данных находится на сервере на другом континенте от моей машины для разработки, поэтому задержки довольно велики. Где-то около 100 мс).
Похоже, что запрос выполняется успешно. Свойство HasRows
объекта SqlDataReader
имеет значение 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 в SQL Server Management Studio, и она прошла успешно. Я попытался жестко закодировать ItemID в инструкции в коде C#, и существуют те же ошибки.
Что еще я могу сделать, чтобы отладить это? Кажется, все в порядке, пока я не попытаюсь получить доступ к результатам запроса.
HasRows
, чтобы проверить, есть ли какие-либо строки, а затем использовалRead
, чтобы перейти к следующей записи. - person Tim Schmelter   schedule 15.04.2016if (reader.Read()) { item_type= TypesMap[rdr["ItemType"].ToString()]; }
- person Nino   schedule 15.04.2016