我正在尝试从SQL DB读取数据类型为DateTime
但该值为NULL的字段。
DateTime STime = NULL;
C#的接收变量是这个
public Nullable<DateTime> StartTime { get; set; }
当我尝试阅读时:
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
StartTime = reader.GetDateTime(7);
}
谁能帮助您从数据库中检索对C#为空的数据?
最佳答案
如果对GetDateTime
的调用可以返回null,则必须首先
在调用此方法之前,请调用IsDBNull以检查是否为空值。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getdatetime(v=vs.110).aspx
如果IsDBNull返回true,则将StartTime设置为null。
这是相当普遍的情况。我编写了扩展方法以使其更易于处理此模式,例如:
public static DateTime? GetDateTimeOrNull(this IDataReader reader, int ordinal)
{
return reader.IsDBNull(ordinal) ? null : (DateTime?)reader.GetDateTime(ordinal);
}
如果您的项目中有该扩展方法,则将进行更改
StartTime = reader.GetDateTime(7);
至
StartTime = reader.GetDateTimeOrNull(7);
顺便说一句,我建议不要对序数使用硬编码的数字。相反,在开始遍历阅读器之前,请先执行类似
int idxTS = reader.GetOrdinal("TheTSColumn");
的操作,然后在循环StartTime = reader.GetDateTimeOrNull(idxTS);
中进行。这样可以保护您的代码免受更改,例如在查询中添加/删除列。