如何将任意日期格式从C#传递给sql后端

时间:2011-01-01 07:34:34

标签: c# sql datetime

我在后端有一个交易日期的日期时间字段。所以我从前面的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 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) 

2 个答案:

答案 0 :(得分:2)

你说:

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

但是我看不到任何证据表明你正在使用任何格式 - 事实上你不应该DateTime没有任何固有格式,只不过数字。正如您可以以十六进制或十进制查看相同的数字一样,您可以通过各种方式查看相同的日期和时间。

您已经将DateTime直接传递给数据库而不是特定格式,这是正确的(通常关于日期/时间格式和数据库的问题是关于不使用参数化查询的人)。您根本不需要担心格式化。

的可能性:

  • 您的数据在其他地方变得腐败,而且您实际上在1753年之前有一个日期
  • 您的SQL语句使用了错误的值
  • 您的数据库驱动程序有问题(您还没有说过您正在使用哪个数据库;它是SQL Server吗?)

答案 1 :(得分:0)

尝试直接将DateTime实例作为参数传递:

Cmd.Parameters.AddWithValue("@TranSactionDate", DateTime.Now);