将NULL日期时间值从T-SQL返回到C#DataTable ==> DataRow而不是空字符串

时间:2012-10-21 17:25:23

标签: c# .net tsql datetime string

此值(row [10])来自DataRow对象,来自T-SQL中的SQL结果集。我相信它有一个"对象"。在我的数据库中,对于此特定记录,此字段的值为NULL,但它在结果集中返回空字符串,而不是空值。我想修复根问题并让我的结果集返回NULL而不是空字符串,但是如果这不可能,那么使这段代码更有效就可以了 - 这意味着第一段代码,因为它适用于所有3个案例。

当row [10] .ToString()等于空字符串,null或DateTime格式时,这是有效的,但我想缩短它。这是我现在的解决方法。

        string temp0 = row[10].ToString();
        DateTime? temp = null;
        if (temp0 == "")
        {
            temp0 = null;
        }
        if (temp0 != null)
        {
            temp = DateTime.Parse(temp0);
        }

        d.date_migrate_prod = temp == null ? null : temp;

这适用于空日期时间值,实际日期时间值,但不适用于行[10]等于空字符串。

        DateTime? temp = DateTime.Parse(row[10].ToString());
        d.date_migrate_prod = temp == null ? null : temp;

4 个答案:

答案 0 :(得分:2)

正确的方法是:

 DateTime? temp = null; //this is fine
 var indexOfYourColumn = reader.GetOrdinal("columnName");//not necessary but makes iterating faster
 while (reader.Read())
 {
       temp = reader[indexOfYourColumn] != DBNull.Value ? (DateTime?) null : DateTime.Parse(reader[indexOfYourColumn].ToString())
 }

为什么呢?你不能在null上执行.ToString()。然后你需要投射喜欢。所以可以为空的DateTime为可以为空的DateTime。

这是很久以前的问题。但接受的答案是不正确的。

答案 1 :(得分:1)

对所述问题的回答。

string temp0 = row[10].ToString();
DateTime?;
if (string.IsNullOrEmpty(temp0)) 
{
    temp = null;
}
else
{
    temp = DateTime.Parse(temp0);
}

可以使用DateTimeTryParse 可以传递null但它将解析为1/1/0001

答案 2 :(得分:1)

以下内容应作为捷径:

DateTime? temp = String.IsNullOrEmpty(row[10].ToString())? null : DateTime.Parse(temp0);

答案 3 :(得分:0)

尝试:

DateTime? localvariable 
      = row[10] == Convert.DBNull ? null : Convert.ToDateTime(row[10].ToString())