0

我正在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异常,我感觉这是因为解析问题。

建议也许关于问题出在哪里?

问候

4

1 回答 1

2

DateTimestring是不同的数据类型,不能相互转换,比如intfloat。您需要解析string才能检索DateTime. 尝试使用下一个代码片段尝试使用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,那么您应该调用ToString()DateTime,将其转换为字符串,例如:

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类型,则可以访问类GetDateTime上的方法OleDbDataReader,例如

product.DateReleased = dbRead.GetDateTime("Date Released");
于 2013-03-27T13:06:50.290 回答