如何使用数据 reader 将可为空的日期时间值转换为字符串?
How to convert a nullable datetime value to string using data reader?
我正在使用 IDataReader
界面回读 nullable datetime
。到目前为止,我以前的专栏阅读按预期工作。
除了此列 ["Implementation End Timestamp"]
,我在其中尝试读回可为 null 的日期时间,将其转换为字符串并将其分配给名为 Implementation_End_String
.[=19 的字符串 属性 =]
这就是我尝试过的。首先回读 DateTime?
值检查是否为 null,然后如果不为 null 则尝试转换 toString()。
但由于他们是 "no explicit conversion between string and DateTime?":
,因此不允许进行此分配
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
)。此方法将 return 纯 DateTime
对象,因此您可以在其上调用任何 ToString()
方法。
IDataReader
是一个相当古老的接口,因此不支持本机可为 null 的类型。如果你倾向于在你的代码中的很多地方使用它,你最好创建一些帮助程序,这将显着减少你的代码。例如,这里是 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 conditional operator 相结合将使所讨论的任务变得如此简单:
Implementation_End_String = dataReader
.GetNullableDateTime("Implementation End Timestamp")?.ToString("d-MMMM-yyyy") ?? "";
我正在使用 IDataReader
界面回读 nullable datetime
。到目前为止,我以前的专栏阅读按预期工作。
除了此列 ["Implementation End Timestamp"]
,我在其中尝试读回可为 null 的日期时间,将其转换为字符串并将其分配给名为 Implementation_End_String
.[=19 的字符串 属性 =]
这就是我尝试过的。首先回读 DateTime?
值检查是否为 null,然后如果不为 null 则尝试转换 toString()。
但由于他们是 "no explicit conversion between string and DateTime?":
,因此不允许进行此分配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
)。此方法将 return 纯 DateTime
对象,因此您可以在其上调用任何 ToString()
方法。
IDataReader
是一个相当古老的接口,因此不支持本机可为 null 的类型。如果你倾向于在你的代码中的很多地方使用它,你最好创建一些帮助程序,这将显着减少你的代码。例如,这里是 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 conditional operator 相结合将使所讨论的任务变得如此简单:
Implementation_End_String = dataReader
.GetNullableDateTime("Implementation End Timestamp")?.ToString("d-MMMM-yyyy") ?? "";