Получить DateTime из базы данных SQL - PullRequest
2 голосов
/ 15 августа 2010

У меня есть запись 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();

Но предпоследнее утверждение выдает исключение, говорящее «Недопустимая попытка чтения, когда нет данных».

Как мне это решить?

Ответы [ 2 ]

6 голосов
/ 15 августа 2010

Что ж, проблема немедленного в вашем коде состоит в том, что вы не вызвали company_reader2.Read(), чтобы переместить курсор на первую строку.

Из документов на SqlDataReader.Read:

Положение SqlDataReader по умолчанию перед первой записью. Поэтому вы должны вызвать Read, чтобы начать доступ к любым данным.

Следует также отметить возвращаемое значение Read(), которое указывает, прочитали ли вы до конца набора записей.

Другие проблемы:

  • Вы должны поместить операторы using вокруг SqlCommand и SqlDataReader, в противном случае, если есть исключение, вы не закрываете соединение. Возможно, вам удастся избавиться от команды и позволить читателю просто исчезнуть автоматически - но я обычно распоряжаюсь обоими, просто поэтому мне не нужно слишком тщательно думать.
  • Вы предполагаете, что формат даты / времени будет подходящим, просто позвонив по номеру ToString без спецификатора формата.
  • Вы должны использовать параметризованный SQL-запрос, чтобы избежать атак с использованием SQL-инъекций.
0 голосов
/ 15 августа 2010

Похоже, вы выполнили команду, но на самом деле не читали ее.

company_reader2 = search_company2.ExecuteReader();
if (company_reader2 != null && company_reader2.HasRows) {
    company_reader2.Read();
    dateform.Text = company_reader2[0].ToString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...