我正在使用:
string date1 = reader. GetDateTime(reader. GetOrdinal("firstMove"). ToString()
但它会抛出一个异常,特别是如果该值为null ....
答案 0 :(得分:0)
请尝试以下代码。
nil
答案 1 :(得分:0)
如果你告诉我们你得到了什么样的例外,你获得例外的事实会更容易解决。可能的错误是:
DateTime
,因此GetDateTime
根本不起作用firstMove
根本不是有效的列名,因此您无法访问该列假设列确实存在并且类型为DateTime
我倾向于使用以下内容:
DateTime? d = reader["firstMove"] as DateTime?;
这非常有效。你想要的是什么?
DateTime? d = reader["firstMove"] as DateTime?;
string dstring = d.HasValue ? d.Value.ToString() : "";
或者:
string date1 = !reader.IsDBNull(reader.GetOrdinal("firstMove")) ? reader.GetDateTime(reader.GetOrdinal("firstMove").ToString() : String.Empty;
答案 2 :(得分:0)
最好使用DateTime(或可以为空的DateTime - DateTime?)而不是字符串来处理日期。
如果您想使用此方法,可以使用扩展方法:
public static class IDataReaderExtensions
{
public static DateTime GetDateTimeOrMinValue(this IDataReader dr, int position)
{
if (dr.IsDBNull(position))
{
return DateTime.MinValue;
}
return dr.GetDateTime(position);
}
public static DateTime? GetDateTimeOrNull(this IDataReader dr, int position)
{
if (dr.IsDBNull(position))
{
return null;
}
return dr.GetDateTime(position);
}
}
用法:
DateTime dateA = reader.GetDateTimeOrMinValue(reader.GetOrdinal("firstMove"));
DateTime? dateB = reader.GetDateTimeOrNull(reader.GetOrdinal("firstMove"));
您甚至可以改进扩展方法,因此它可以接收列名并在内部找到序号位置。
希望这有帮助,
答案 3 :(得分:-2)
使用或函数检查null是否为null。
if(string1 || string2 ||string3)