C#DateTime对象+存储过程

本文关键字:存储过程 对象 C#DateTime | 更新日期: 2023-09-27 18:05:37

我使用SqlCommand从代码中调用存储过程,其中一些参数是DateTime类型,当从Management Studio调用过程时,我使用以下格式yyyy-MM-dd,例如2011-01-01,并相应地返回结果。

在我的C#代码中,我正在创建DateTime对象,如下所示:

DateTime dateFrom = new DateTime(2011,01,01);

当我运行应用程序时,日期被完全忽略,所有数据都被返回。在相应的调试之后,我注意到DateTime对象的格式是:{01/01/2011 00:00:00},所以这可能是导致问题的原因。

参数被添加到SqlCommand中,如下所示:

cmd.Parameters.AddWithValue("@DateFrom", SqlDbType.DateTime);

你知道吗?

复制代码:

 using (SqlConnection conn = new SqlConnection(connectionString))
 {
    DateTime dateFrom = new DateTime(2011,01,01);
        DateTime dateTo = new DateTime(2011, 01, 31);
    SqlCommand cmd = new SqlCommand(strStoredProcName, conn);
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@DateFrom", SqlDbType.DateTime);
        cmd.Parameters.AddWithValue("@DateTo", SqlDbType.DateTime);
    cmd.Parameters["@DateFrom"].Value = dateFrom;
        cmd.Parameters["@DateTo"].Value = dateTo;
 }

C#DateTime对象+存储过程

对于日期-时间数据类型,从C#到SQL不应该有格式问题。

可能有两件事导致了这个问题:

  1. 据我记忆所及,您不需要为参数名称添加@

    cmd.Parameters.AddWithValue("DateFrom", SqlDbType.DateTime);

  2. AddWithValue的重载是字符串parameterName和对象值。您已传递SqlDbType。DateTime作为值。改为传递DateTime变量。

您有两个选项,可以选择AddAddWithValue,格式如下:

1( cmd.Parameters.Add("@DateFrom", SqlDbType.DateTime).Value = dateFrom;

2( cmd.Parameters.AddWithValue("@DateFrom", dateFrom);

如果存储过程中的datetime参数是datetime类型,则基本上不需要将该值作为datetime传递。您可以传递简单的字符串值,如下所示:

cmd.Parameters.Add("@DateFrom", SqlDbType.DateTime).Value = "23-03-2013";