如何将NULL值传递给存储过程

时间:2014-06-24 14:28:06

标签: c# sql datetime null

我将一个DateTime Param传递给我的存储过程,该过程将此值与其他值一起插入表中。

我用来传递这个变量的代码是

cmdProc.Parameters.AddWithValue("@pi_TDC_DATETIME_STAMP", Convert.ToDateTime(Param[7]));

现在,这个Array' Param从TSV文件中获取其值,并且在文件的某些行中,datetime为空白,即Ok。所以我需要传递一个null变量。但是我的代码一旦遇到这样的条目就会失败,这就是它抛出的异常。

  

字符串未被识别为有效的DateTime。在   System.DateTime.Parse(String s,IFormatProvider provider)at   System.Convert.ToDateTime(String value)

我肯定知道插入值的代码和存储过程是有效的,因为它插入了10个值,并且只有在遇到空的DATETIME COLUMN时才会中断。我怎样才能克服这个问题

3 个答案:

答案 0 :(得分:2)

使用DateTime.TryParse检查是否有有效日期,否则通过DBNull.Value

DateTime dt;
if (DateTime.TryParse(Param[7], out dt))
{
    cmdProc.Parameters.AddWithValue("@pi_TDC_DATETIME_STAMP", dt);
}
else
{
    cmdProc.Parameters.AddWithValue("@pi_TDC_DATETIME_STAMP", DBNull.Value);
}

答案 1 :(得分:1)

假设您的Param数组包含字符串

cmdProc.Parameters.AddWithValue("@pi_TDC_DATETIME_STAMP", 
                                string.IsNullOrWitheSpace(Param[7])? 
                                DBNull.Value : Convert.ToDateTime(Param[7]));

(请注意,Habib的答案更正确,因为它还处理无效的日期时间情况,只有当您确定您的语言环境有空白(或空格)或有效的日期时间字符串表示时,此答案才有效) / p>

答案 2 :(得分:1)

DateTime? dtVariable = null;
if(!string.IsNullOrEmpty(Param[7]))
dtVariable = Convert.ToDateTime(Param[7]);
cmdProc.Parameters.AddWithValue("@pi_TDC_DATETIME_STAMP", dtVariable);