我将一个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时才会中断。我怎样才能克服这个问题
答案 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);