Вставка даты БД иногда работает

У меня есть такая строка:

command.Parameters.Add("@date", SqlDbType.DateTime, 8).Value = date_of_trip;

где date_of_trip - строка, содержащая 25-9-2013 (т.е. день-месяц-год)

Это дает мне сообщение об ошибке:

System.ArgumentException: невозможно преобразовать 25-9-2013 в System.DateTime. Имя параметра: тип ---> System.FormatException: строка не распознается как допустимое значение DateTime.

Однако, если date_of_trip равно 1-1-2013, похоже, он работает отлично!


person oshirowanen    schedule 15.04.2013    source источник


Ответы (2)


Вы должны проанализировать строку до datetime, прежде чем отправлять ее в базу данных.

Например:

DateTime dt;
if(DateTime.TryParse(date_of_trip, out dt))
{
    command.Parameters.Add("@date", SqlDbType.DateTime, 8).Value = dt;
    // ...
}
else
{
    // you should use a CompareValidator to check if it's a valid date
}

Если вы хотите убедиться, что ваш заданный формат будет работать, даже если текущая культура сервера изменится, вы можете использовать DateTime.TryParseExact с форматом "dd-MM-yyyy":

if (DateTime.TryParseExact(date_of_trip, "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dt))
{
    // ...
}
person Tim Schmelter    schedule 15.04.2013

Я думаю, это потому, что сервер ожидает, что первым параметром будет месяц. Попробуйте использовать настоящий DateTime или формат гггг-мм-дд (например, 25 сентября 2013 г.), который всегда должен работать.

person Toverbal    schedule 15.04.2013