如何使用数据读取器将可为空的日期时间值转换为字符串
本文关键字:日期 时间 字符串 转换 读取 数据 何使用 | 更新日期: 2023-09-27 18:12:54
我正在使用IDataReader
接口读取nullable datetime
。到目前为止,我之前的专栏阅读工作正常。
除了这个列["Implementation End Timestamp"]
,我试图读回一个可空的日期时间,将其转换为字符串并将其分配给一个名为Implementation_End_String
的字符串属性。
这就是我所尝试的。首先回读DateTime?
值,检查是否为空,然后尝试转换toString(),如果不是空。
但是这个赋值是不允许的,因为它们是"字符串和日期时间之间没有显式转换?":
Implementation_End_String = dataReader["Implementation End Timestamp"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(dataReader["Implementation End Timestamp"]).ToString("d-MMMM-yyyy"), //show full month name
我想我需要得到DateTime的value
调用toString()对它。
问题:
如何将回读DateTime?
值转换为字符串类型?
每种Nullable<T>
类型都有GetValueOrDefault
方法。如果没有值,您可以使用此方法检索T
的值或默认值(在您的示例中是DateTime.MinValue
)。该方法将返回普通的DateTime
对象,因此您可以在其上调用任何ToString()
方法。
IDataReader
是一个相当旧的接口,因此不支持本机可空类型。如果您倾向于在代码中的许多地方使用它,那么您最好创建一些帮助程序,这将大大减少您的代码。例如,以下是DateTime?
的帮助器方法,您可以轻松地对其他类型执行类似操作:
public static class DataReaderExtensions
{
public static DateTime? GetNullableDateTime(this IDataReader source, string name)
{
return source.GetNullableDateTime(source.GetOrdinal(name));
}
public static DateTime? GetNullableDateTime(this IDataReader source, int i)
{
return !source.IsDBNull(i) ? source.GetDateTime(i) : (DateTime?)null;
}
}
这个,结合c# 6的null条件运算符,将使所讨论的任务变得简单:
Implementation_End_String = dataReader
.GetNullableDateTime("Implementation End Timestamp")?.ToString("d-MMMM-yyyy") ?? "";