检索DateTime字段时出现异常

本文关键字:异常 DateTime 字段 检索 | 更新日期: 2023-09-27 18:06:20

我正在从访问数据库检索DateTime数据,并希望将其分配给对象作为字符串值。

OleDbDataReader dbRead = cmd.ExecuteReader();
while (dbRead.Read())
{
    product.DateReleased = dbRead["Date Released"] != DBNull.Value ? (string)dbRead["DATE"] : "No Date available";
    product.DatePublished = dbRead["Publish_Date"] != DBNull.Value ? (string)dbRead["Publish_Date"] : "No Date Available"; 
}

Product对象的属性是一个字符串值,我从数据库检索的值是DateTime

尝试运行进程给我一个InvalidCastException异常,我有一种感觉,这是因为解析问题。

问题出在哪里?

检索DateTime字段时出现异常

DateTimestring是不同的数据类型,不能像intfloat那样相互强制转换。为了检索DateTime,您需要解析string。尝试使用下一个代码片段尝试用当前区域性中提供的默认格式解析DateTime

OleDbDataReader dbRead = cmd.ExecuteReader();
 while (dbRead.Read())
 {
     product.DateReleased = dbRead["Date Released"] != DBNull.Value ? DateTime.Parse(dbRead["DATE"]) : null;
     product.DatePublished = dbRead["Publish_Date"] != DBNull.Value ? DateTime.Parse(dbRead["Publish_Date"]) : null; 
 }

假设DatePublishedDateReleased的类型为DateTime?。如果您有特定的日期格式,您可以使用DateTime.ParseExact方法,该方法以格式为参数,例如

DateTime.ParseExact(dbRead["Date Released"], "dd.MM.yyyy", CultureInfo.InvariantCulture)

如果DatePublishedDateReleased的类型是string,那么你应该在DateTime上调用ToString(),将其转换为字符串,如:

product.DateReleased = dbRead["Date Released"] != DBNull.Value ? dbRead["DATE"].ToString() : "No Date available";
product.DatePublished = dbRead["Publish_Date"] != DBNull.Value ? dbRead["Publish_Date"].ToString() : "No Date Available";

如果数据库中的底层列具有DateTime类型,则可以在OleDbDataReader类上访问GetDateTime方法,如

product.DateReleased = dbRead.GetDateTime("Date Released");