Получить DateTime из базы данных SQL

У меня есть запись 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 без спецификатора формата.
  • Вы должны использовать параметризованный SQL-запрос, чтобы избежать атак SQL-инъекций.