2013-03-27 94 views
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"; 
} 

產品對象的屬性是一個字符串值,我從數據庫中檢索的值是DateTime

試圖運行過程中給了我一個InvalidCastException例外,我有一種感覺那是因爲解析問題。

建議也許問題在哪裏?

問候

+0

什麼是數據庫中的日期格式 – 2013-03-27 13:04:22

+0

可能是您的'product.DateReleased'是DateTime並且您嘗試爲其分配一個字符串? – Vladimir 2013-03-27 13:06:21

回答

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; 
} 

假設DatePublishedDateReleasedDateTime?類型。如果您有具體日期的格式,你可以使用DateTime.ParseExact方法,它的格式作爲參數,例如

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

如果DatePublishedDateReleasedstring型的,那麼你應該調用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類型,你可以在OleDbDataReader類訪問GetDateTime方法,像

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