У меня есть запись DateTime в моей таблице в базе данных, и я пишу запрос, чтобы получить его из базы данных:
string command2 = "select Last_Modified from Company_Data where Company_Name='" + DescriptionEntryForm.SelectedItem.ToString() + "'"; SqlCommand search_company2 = new SqlCommand(command2, con_string.con); SqlDataReader company_reader2 = search_company2.ExecuteReader(); dateform.Text = company_reader2.GetValue(0).ToString(); company_reader2.Close();
Но предпоследний оператор выдает исключение: «Неверная попытка прочитать, когда нет данных».
Как я могу это решить?
Похоже, вы выполнили команду, но на самом деле не прочитали ее.
company_reader2 = search_company2.ExecuteReader(); if (company_reader2 != null && company_reader2.HasRows) { company_reader2.Read(); dateform.Text = company_reader2[0].ToString(); }
Ну, проблема с вашим кодом заключается в том, что вы не вызывали company_reader2.Read()
чтобы переместить курсор в первую строку.
Из документов для SqlDataReader.Read
:
По умолчанию позиция SqlDataReader находится перед первой записью. Поэтому вы должны вызвать «Чтение», чтобы начать доступ к любым данным.
Следует также отметить возвращаемое значение Read()
которое указывает, читаете ли вы до конца набора записей.
Другие проблемы:
using
операторов вокруг SqlCommand
и SqlDataReader
, иначе, если есть исключение, вы не будете закрывать соединение. Возможно, вам удастся избавиться от распоряжения командой и позволить читателю просто исчезнуть автоматически – но я обычно распоряжаюсь обоими тем, что мне не нужно слишком тщательно думать. ToString
без спецификатора формата.