如何通过storedprocedure添加null日期值?

时间:2014-12-12 07:28:56

标签: c# sql-server-2008 datetime stored-procedures

我有一个我存储的字符串值name,如

cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = string.IsNullOrEmpty(name) ? (object)DBNull.Value : name;

我有一个DateTimedate。如何像上面的方法一样存储这个日期值。我的日期值数据类型是日期。我试过这个

  cmd.Parameters.Add("@fromdate", SqlDbType.date).Value = string.IsNullOrEmpty(fromdate) ? (object)DBNull.Value : fromdate;

我应该添加string.IsNullOrEmpty的内容。 我的存储过程代码

 ALTER PROCEDURE [dbo].[dbo_sample]
 (
 @name varchar (50),
 @Fromdate date
 )

3 个答案:

答案 0 :(得分:0)

您需要使用其他数据类型。与数据库目标列中的相同。

或者

  

<强>日期时间即可。日期和时间数据的范围从1753年1月1日到9999年12月31日,精确到3.33毫秒。

  

<强> DATETIME2 即可。日期和时间数据。日期值范围是从公元1月1日到公元9999年12月31日。时间值范围为00:00:00到23:59:59.9999999,精度为100纳秒。

SqlDbType Enumeration

答案 1 :(得分:0)

 cmd.Parameters.Add(new SqlParameter
        {
            ParameterName = "@Fromdate",
            SqlDbType = SqlDbType.Date,
            Value = fromdate == default(DateTime) ? fromdate : new DateTime?() });

答案 2 :(得分:0)

在C#中,日期时间总是一个值。因此,您必须针对默认值进行测试,而不是null

if (fromdate != default(DateTime))
{
    parameters.Add(
        new SqlParameter {
            ParameterName = "@Fromdate",
            SqlDbType = SqlDbType.Date,
            Value = fromdate});

}
else
{
    parameters.Add(
        new SqlParameter {
            ParameterName = "@Fromdate",
            SqlDbType = SqlDbType.Date,
            Value = null});
}

但是如果用nodate处理变量,你应该使用DateTime吗?并使用可空的!

这是我在制作中使用的方法和方便的助手方法:

public static SqlParameter CreateParam(
    string paramName,
    object value,
    SqlDbType sqlDbType)
{
    SqlParameter p = new SqlParameter(paramName, sqlDbType)
    {
        Value = value ?? DBNull.Value,
    };
    return p;
}

及其用途:

cmd.Parameters.Add(Helpers.CreateParam(
    "@Fromdate",
    fromdate.HasValue ? fromdate.Value : null,
    SqlDbType.DateTime));