【发布时间】:2011-01-01 07:34:33
【问题描述】:
我在后端有一个交易日期的日期时间字段。所以我从前面的 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;
从演示层调试时:
string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
在这我得到了正确的预期日期格式,但是当调试到这一行时
Prp.TransDate=Convert.ToDateTime(date);
日期格式再次更改为 2011 年 1 月 1 日。
但是我的后端 sql datefield 需要这种格式的日期参数 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)
【问题讨论】:
-
DateTime值没有格式。该格式仅在将DateTime转换为string时才起作用。 -
我注意到,在将交易日期传递给 DAL 时,您使用的是“propertyobj.TransDate”,而在其他地方则指的是“Prp.TransDate”。这是代码中的实际内容,还是撰写问题时的无意错误?