kullanarak oracle'den zaman ofsetleri nasıl okunur? TIMESTAMP WITH TIME ZONE sütununda bir veri deposunda saklanan veriler var ve şimdi Dapper kullanarak bir C# DateTimeOffset değişkenine geri okumaya çalışıyorum. Sorun şu ki, dapper veritabanındaki ofset değerini yok sayar ve değişkemi her zaman ortamın mevcut ofseti ile doldurur.Dapper
Veritabanından ofset değerini tanıması için basit bir yöntem var mı?
bu geçersiz bir döküm istisna verir yazılı olarakvar 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);
, şık bir DateTime olarak okur anlaşılmaktadır ardından göz ardı DateTimeOffset için döküm çalışır:
Temelde ben çalışmak bu satırlar boyunca bir şey görmek ister ofset değeri.
Bir tabloyu sorgulayan ve bu türlerle tanımlanan bir sınıf nesnesini dolduran kodum hata atmaz, ancak nesne örneğini veritabanındaki değer yerine yerel sapma ile doldurur. Bu yüzden yukarıdaki giriş değeriyle çalışıyor olsaydım, 2016-03-15 14:30 +0
yerine 2016-03-15 14:30 -5
ile sonuçlanırdım.
Bunun bir Dapper sorunu olduğundan emin değilim, ancak ODP.Net ile ilgili. [Bu cevap] (http://stackoverflow.com/a/14140274/634824) yardım ediyor mu? –
@Matt Gerçekten değil. Bir veri adaptörü kullanılıyorsa, dapper uygulamasında gömülüdür. Bu cevapta atıfta bulunulan ayarlara herhangi bir erişim bulamadım. – Rozwel
'DateTimeOffset' utc’yi dönüştürmeyi denediniz mi? 'output = bağlantı.ExecuteScalar (" to_timestamp_tz ('"+ giriş.ToUniversalTime() öğesini seçin. ToString (" yyyy-AA-dd HH: mm zzz ") +"', 'YYYY-AA-DD HH24: MI TZH: TZM ') DUAL ");' –