私は、DAAB 4.0フレームワークでc#を使用して、datareaderからdbtype.timeの列タイプを使用してMS SQL 2008データベースから結果を読み取りました。DbType.Timeの結果をTimespanオブジェクトに変換する方法
私の問題は、dbtype.timeはタイムパンにマップする必要がありますが、私が見ているタイムパンの唯一のクローズコンストラクタはlongを受け取り、データウェアハウスから返された結果をlong型に直接キャストすることはできません期間。
私はこれを見つけましたArticleこれはdatareader.getTimeSpan()メソッドを示していますが、daab 4.0のdatareaderにはこのメソッドがないようです。
したがって、結果をdatareaderからtimespanオブジェクトに変換するにはどうすればよいですか?
あなたとケンの両方の解決策は良いです。ただし、値がnullの場合、Kenのソリューションの例外メッセージはより説明的です。 'SqlNullValueException - データがNULLです。このメソッドまたはプロパティは、Null値で呼び出すことはできません。 'VS' InvalidCastException - 指定されたキャストは無効です.' – TheWanderingMind
BishopBarberコメントに返答するには、その列をnullにすることができる場合は、TimeSpanに変換する必要がありますか?ヌル可能型で、nullをチェックします。 'TimeSpan? span = reader ["tsfield"] == DBNull.Value? (TimeSpan?)null:(TimeSpan?)reader ["tsfield"] ' –
インデックスを使用してデータリーダーにアクセスしないことが多いため、このソリューションが優れています。私はしかし、nullをチェックする中間的な方法があります。 – MichaelChan