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