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

DateTimeとは異なるデータ型であり、やのようにstring相互にキャストすることはできません。を取得するには、解析する必要があります。次のコードスニペットを使用して、現在のカルチャで提供されているデフォルトの形式で解析してみてください。intfloatstringDateTimeDateTime

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)

DatePublished およびDateReleasedがタイプの場合、DateTimestringを呼び出して、次のように文字列に変換する必要があります。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アクセスできます。GetDateTimeOleDbDataReader

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