Oracle TIMESTAMP WITH TIME ZONE列にデータが格納されていますが、これをDapperを使用してC#DateTimeOffset変数に読み取ろうとしています。問題は、dapperがデータベースのオフセット値を無視し、常に変数に現在の環境変数を設定していることです。Dapperを使用してoracleから時間オフセットを読み取る方法
データベースからのオフセット値をdapperに認識させる簡単な方法はありますか?
これは無効なキャスト例外を与えて書かれたようvar input=new DateTimeOffset(2016, 3, 15, 14, 30, 0, TimeSpan.Zero);
DateTimeOffset output;
using(var connection=new OracleConnection(QueryConnectionString)) {
output=connection.ExecuteScalar<DateTimeOffset>("Select to_timestamp_tz('"+input.ToString("yyyy-MM-dd HH:mm zzz")+"', 'YYYY-MM-DD HH24:MI TZH:TZM') From DUAL");
}
Assert.AreEqual(input, output);
が、Dapperのは、日時としてそれを読み取っていることが表示され、その後、無視、のDateTimeOffsetにキャストしようとします:
は基本的に私は仕事、これらの線に沿って何かを見たいですオフセット値
テーブルを照会し、これらの型で定義されたクラスオブジェクトを移入するコードではエラーは発生しませんが、データベースの値ではなくローカルオフセットがオブジェクトインスタンスに設定されます。上記の入力値で作業していた場合、2016-03-15 14:30 +0
の代わりに2016-03-15 14:30 -5
で終わることになります。
これはDapperの問題ではなく、むしろODP.Netに関連しているかどうかはわかりません。 [この回答](http://stackoverflow.com/a/14140274/634824)は役に立ちますか? –
@Matt実際にはありません。データアダプタが使用されている場合、それはdapper実装に埋め込まれます。私はその答えに記載されている設定へのアクセスを見つけることができませんでした。 – Rozwel
あなたは 'DateTimeOffset'をutcに変換しようとしましたか? (YYYY-MM-DD HH:mm zzz)+ YYYY-MM-DD HH24:'output = connection.ExecuteScalar(" to_timestamp_tz( '"+ input.ToUniversalTime() MI TZH:TZM ')DUALから ");' –