2

postgresql interval を次のようにキャストできませんTimeSpan:

item.TSHours = dr["Hours"] == DBNull.Value ? TimeSpan.Zero : (TimeSpan)dr["Hours"];

投げています:

「指定されたキャストは無効です」

しかしdr["Hours"]、値を返します"06:00:00":/

私は何を間違っていますか?npgsql のいくつかのバージョンを試してみましたが、何も変わりませんでした。

dr["時間"] は NpgsqlTypes.NpgsqlInterval です

編集:

私がそれを機能させる唯一の方法は、次を使用することです:

new TimeSpan(((NpgsqlTypes.NpgsqlInterval)dr["Hours"]).TotalTicks)
4

1 に答える 1

3

少なくとも、文字列を TimeSpan に直接キャストすることはできません。これはうまくいきます:

item.TSHours = dr["Hours"] == DBNull.Value ? TimeSpan.Zero : TimeSpan.Parse(dr["Hours"].ToString());

npgsql APiドキュメントから:

心配する必要のないユーザーに不要なプロバイダー固有の懸念を強いることを避けるために、NpgsqlInterval 値を含むフィールドで GetValue を呼び出すと、NpgsqlInterval ではなく TimeSpan が返されます。

于 2012-03-01T07:07:26.833 に答える