Как передать произвольный формат даты из C # в SQL-сервер - PullRequest
1 голос
/ 01 января 2011

У меня есть поле даты и времени для даты транзакции в серверной части.Так что я передаю эту дату из переднего C # .net, в следующем формате:

2011-01-01 12:17:51.967

, для этого я написал:

уровень представления:

string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
PropertyClass prp=new PropertyClass();
Prp.TransDate=Convert.ToDateTime(date);

Структура PropertyClass:

Public class property
{
private DateTime transdate;
public DateTime TransDate
{
    get
    {
        return transdate;
    }
    set
    {
        transdate = value;
    }
   }
}

Из уровня DAL, передавая TransactionDate, следующим образом:

Cmd.Parameters.AddWithValue("@TranSactionDate”, SqlDbType.DateTime).value=propertyobj.TransDate;

При отладке из уровня Presntation:

string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);

в этом яполучить правильный ожидаемый формат даты, но когда отладки переходят на эту строку

Prp.TransDate=Convert.ToDateTime(date);

, снова формат даты меняется на 1/1 / 2011.

Но в моем внутреннем поле sql date требуется параметр даты 2011-01-01 12: 17: 51.967 в этом формате, иначе выдается исключение недопустимого формата даты.

Примечание. При передаче даты в виде строки без преобразования в дату и время возникают исключения, такие как:

System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753     12:00:00 AM and 12/31/9999 11:59:59 PM. at   System.Data.SqlTypes.SqlDateTime.FromTimeSpan(TimeSpan value) at System.Data.SqlTypes.SqlDateTime.FromDateTime(DateTime value) at System.Data.SqlTypes.SqlDateTime..ctor(DateTime value) at System.Data.SqlClient.MetaType.FromDateTime(DateTime dateTime, Byte cb) at System.Data.SqlClient.TdsParser.WriteValue(Object value, MetaType type, Byte scale, Int32 actualLength, Int32 encodingByteSize, Int32 offset, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.TdsExecuteRPC(_SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc) 

Ответы [ 2 ]

2 голосов
/ 01 января 2011

Вы говорите:

 So I am passing that date from front C#.net, in the below format:

, но я не вижу никаких доказательств того, что вы вообще используете какое-либо форматирование - и действительно, вы не должны .DateTime не имеет никакого собственного формата, равно как и число.Так же, как вы можете просматривать одно и то же число в шестнадцатеричном или десятичном виде, вы можете просматривать одну и ту же дату и время различными способами.

Вы уже передаете DateTime в базу данных напрямую, а не в определенном формате., что правильно (обычно вопросы о форматировании даты / времени и баз данных касаются людей, не использующих параметризованные запросы).Вам вообще не нужно беспокоиться о форматировании.

Возможности:

  • Ваши данные повреждаются в другом месте, и у вас фактически есть дата до 1753
  • Ваш оператор SQL использует неправильное значение
  • Что-то не так с драйвером базы данных (вы не сказали, какую базу данных вы используете; это SQL Server?)
0 голосов
/ 01 января 2011

Попробуйте передать экземпляр DateTime напрямую как параметр:

Cmd.Parameters.AddWithValue("@TranSactionDate", DateTime.Now);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...