2

此值 (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;

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

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

4 回答 4

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())
 }

为什么?您不能对空值执行 .ToString() 。然后你需要投喜欢。所以可以为空的日期时间到可以为空的日期时间。

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

于 2014-09-05T07:01:45.953 回答
1

对所述问题的回答。

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

可以使用 DateTimeTryParse。
可以传递一个空值,但它会解析为 1/1/0001

于 2012-10-21T19:07:37.887 回答
1

以下应该作为快捷方式:

DateTime? temp = String.IsNullOrEmpty(row[10].ToString())? null : DateTime.Parse(temp0);
于 2012-10-21T19:23:23.800 回答
0

尝试:

DateTime? localvariable 
      = row[10] == Convert.DBNull ? null : Convert.ToDateTime(row[10].ToString())
于 2012-10-22T14:31:55.423 回答