C# 处理从数据库返回的空日期
您好,我正在尝试返回可能具有空日期值的集合。 但是,如果它们是空的,我希望保持这种方式,而不仅仅是使用任意的日期 如果是字符串,我会检查空值,如下所示:C# 处理从数据库返回的空日期,c#,.net,sql-server-2005,ado.net,C#,.net,Sql Server 2005,Ado.net,您好,我正在尝试返回可能具有空日期值的集合。 但是,如果它们是空的,我希望保持这种方式,而不仅仅是使用任意的日期 如果是字符串,我会检查空值,如下所示: calEventDTO.occurrenceType = dr.IsDBNull(10) ? null : dr.GetString(10); 约会时我该怎么做? 以下内容未编译(在'null'和System.DateTime'之间没有隐式转换) 我的dto设置为处理空值 public DateTime? recurrenceID {
calEventDTO.occurrenceType = dr.IsDBNull(10) ? null : dr.GetString(10);
约会时我该怎么做?
以下内容未编译(在'null'和System.DateTime'之间没有隐式转换)
我的dto设置为处理空值
public DateTime? recurrenceID
{
get { return _recurrenceID; }
set { _recurrenceID = value; }
}
非常感谢任何提示/帮助/指点。
谢谢试试:
calEventDTO.recurrenceID = dr.IsDBNull(9) ? null : (DateTime?) dr.GetDateTime(9);
那个?运算符要求两个操作数(在本例中为null和dr.GetDateTime(9))的类型相同。请尝试:
calEventDTO.recurrenceID = dr.IsDBNull(9) ? null : (DateTime?) dr.GetDateTime(9);
那个?运算符需要两个操作数(NULL和DR.GETDATETIME(9)在这种情况下)是相同的类型。 < P>条件运算符不考虑将结果分配给什么,因此必须将任一操作数都转换为DATETIME:
calEventDTO.recurrenceID = dr.IsDBNull(9) ? (DateTime?)null : dr.GetDateTime(9);
条件运算符不考虑将结果分配给什么,因此必须将任一操作数都转换为DATETIME:
calEventDTO.recurrenceID = dr.IsDBNull(9) ? (DateTime?)null : dr.GetDateTime(9);
IsDbNull(int)通常比使用GetSqlInt32之类的方法,然后与DBNull.Value或使用自己的.IsNull之类的方法慢得多:
public static int Int32(this SqlDataReader r, int ord)
{
var t = r.GetSqlInt32(ord);
return t.IsNull ? default(int) : t.Value;
}
尝试了一些模板解决方案,但到目前为止没有任何效果。问题是,所有Sql类型(这里是SqlInt32)实际上都是结构,而它们都有.Value属性C#,没有真正的模板来处理它。此外,它们还有自己的INullable接口,该接口只有.IsNull,不能与Nyllable兼容
我怀疑需要一整套Sql类型作为C#模板,或者向它们添加ICOnvertible,以便只需要一个或两个模板化方法
如果有人有一个或两个函数技巧的想法,请说出来:-)IsDbNull(int)通常比使用诸如GetSqlInt32之类的方法,然后与DBNull.Value进行比较或使用它自己的方法慢得多。IsNull类似:
public static int Int32(this SqlDataReader r, int ord)
{
var t = r.GetSqlInt32(ord);
return t.IsNull ? default(int) : t.Value;
}
尝试了一些模板解决方案,但到目前为止没有任何效果。问题是,所有Sql类型(这里是SqlInt32)实际上都是结构,而它们都有.Value属性C#,没有真正的模板来处理它。此外,它们还有自己的INullable接口,该接口只有.IsNull,不能与Nyllable兼容
我怀疑需要一整套Sql类型作为C#模板,或者向它们添加ICOnvertible,以便只需要一个或两个模板化方法
如果有人有一个或两个功能性技巧的想法,大声说出来:-)