Как правильно конвертировать запрос в DateTime в asp.net? - PullRequest
0 голосов
/ 09 октября 2019

В моем приложении я пытаюсь получить дату из базы данных и сравнить ее с местным временем. Сейчас я получаю сообщение об ошибке при неправильном преобразовании даты.

Я пытался:

  • Convert.ToDateTime()
  • DateTime.ParseExact()

Мой код:

string time = "Select top(1) DATE from SERVICE order by DATE desc"; 

SqlCommand command = new SqlCommand(time, connection);
connection.Open();

using (SqlDataReader timereader = timecommand.ExecuteReader())
{
    while (timereader.Read())
    {
        if (DateTime.ParseExact(time, "yyyy-MM-dd HH:mm:ss", null).AddMinutes(10) > currenttime)
        {
            // code
        }
    }
    connection.Close();
}

Я надеюсь, что когда я получу это значение из базы данных, я смогу преобразовать его в правильное значение datetime, сравнить с местным временем и запустить другой код послечто.

В настоящее время я просто получаю эту ошибку:

Строка не была распознана как допустимый DateTime. Есть неизвестное слово, начинающееся с индекса 0.

Я, вероятно, просто тупой и упускаю что-то очевидное ..

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

Ваш запрос выбирает одно значение. Используйте ExecuteScalar и приведите его к DateTime (это уже DateTime, но внутри object):

string time = "Select top(1) DATE from SERVICE order by DATE desc"; 

SqlCommand command = new SqlCommand(time, connection);
connection.Open();
DateTime d = (DateTime)command.ExecuteScalar();
connection.Close();

После того, как вы это сделаете, и перед тем, как приступить к долгой миссии этого затянувшегося способаполучение данных из базы данных, преобразование их в объекты для использования в вашем приложении и т. д., взгляните хотя бы на ORM под названием Dapper, если не на Entity Framework. Dapper в основном то, что вы делаете сейчас, но он автоматически конвертирует ваши запросы в объекты и обратно и сохраняет много утомительного кода. С Dapper это выглядело бы как:

using (var connection = new SqlConnection("connstr"))
{   
  var d = connection.QuerySingle<DateTime>("SELECT TOP 1 Date FROM ...");
}

Да, это не так уж и много, как сейчас, верно? Но что, если у вас есть список Order, который сам по себе имеет 20 свойств:

using (var connection = new SqlConnection("connstr"))
{   
  var orders = connection.Query<Order>("SELECT * FROM order WHERE customerID = @custid", new {custid = 123}).ToList();
}

Orders теперь представляет собой список объектов Order для клиента 123, параметризованный, безопасный для инъекций, быстрый и однострочный для чтения и заполненияваши заказы;для этого в устройстве чтения данных потребуется как минимум 25 строк скучного кода

http://dapper -tutorial.net и потратить 2 минуты на чтение;Я сделаю ставки, вы будете рады, что вы сделали

1 голос
/ 09 октября 2019

Просто попробуйте прочитать значение как правильный, собственный DateTime тип, подобный этому (при условии, что столбец DATE в SQL Server на самом деле является DATETIME или подобным типом данных - нестрока - надеюсь!):

using (SqlDataReader timereader = timecommand.ExecuteReader())
{
    while (timereader.Read())
    {
        // just read the DateTime value as such
        DateTime dt = timereader.GetDateTime(0);

        // then do whatever you need to do with this DateTime value .....
    }
    connection.Close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...