0

我正在使用代码从我的代码中调用存储过程SqlCommand,其中一些参数是DateTime类型的,当从 Management Studio 调用过程时,我使用以下格式yyyy-MM-dd2011-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;
 }
4

3 回答 3

3

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

可能有两件事导致此问题:

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

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

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

于 2013-03-25T15:30:04.510 回答
3

您有两个选项可以选择AddAddWithValue使用以下格式:

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

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

于 2013-03-25T15:31:20.040 回答
0

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

cmd.Parameters.Add("@DateFrom", SqlDbType.DateTime).Value = "23-03-2013";
于 2013-03-26T07:01:06.360 回答