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#到SQL不应该有格式问题。
可能有两件事导致了这个问题:
-
据我记忆所及,您不需要为参数名称添加@
cmd.Parameters.AddWithValue("DateFrom", SqlDbType.DateTime);
-
AddWithValue的重载是字符串parameterName和对象值。您已传递SqlDbType。DateTime作为值。改为传递DateTime变量。
您有两个选项,可以选择Add
或AddWithValue
,格式如下:
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";