我正在从访问数据库中检索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
异常,我觉得这是因为解析问题。
建议也许问题出在哪里?
此致
答案 0 :(得分:2)
DateTime
和string
是不同的数据类型,无法相互投放,例如int
和float
。您需要解析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;
}
假设DatePublished
和DateReleased
属于DateTime?
类型。如果您有特定的日期格式,则可以使用DateTime.ParseExact
方法,该方法将格式作为参数,例如
DateTime.ParseExact(dbRead["Date Released"], "dd.MM.yyyy", CultureInfo.InvariantCulture)
如果DatePublished
和DateReleased
的类型为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
类型,则可以在GetDateTime
类上访问OleDbDataReader
方法,例如
product.DateReleased = dbRead.GetDateTime("Date Released");