У меня есть поле даты и времени для даты транзакции в серверной части.Так что я передаю эту дату из переднего 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)