我正在嘗試使用TIMESTAMP(0) WITH TIMEZONE
類型的列對錶進行更新。用數據庫中的TIME ZONE值更新Oracle TIMESTAMP(0)的正確方法
我已經嘗試了幾種不成功的方法,因爲TIMESTAMP
寫入數據庫的方式沒有美國東部時間的偏移格式,例如-05:00
。它使用AMERICA/NEW_YORK
作爲時區保存,這會導致另一個無法正確處理此問題的應用程序出現問題。
CURRENT:28-NOV-16 10.51.43.000000000 AM AMERICA/NEW_YORK
DESIRED:28-NOV-16 10.51.43.000000000 AM -05:00
的很多帖子這裏主要講來格式化,當它從數據庫中檢索到的數據;其他示例用SqlPlus描述,而不用C#描述。
Using(OracleConnection conn = new OracleConnection(......))
{
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.BindByName = true;
cmd.CommandText = "update customer set email_addr = :EMAIL, modified_date= SYSDATE
where cust_id = :CUSTID";
conn.Open();
cmd.Parameters.Add("EMAIL", OracleDbType.Varchar2).Value = txtEmail.Text;
cmd.Parameters.Add("MODIFIED_DATE", OracleDbType.Varchar2).Value = OracleDate.GetSysDate().ToOracleTimeStamp();
cmd.Parameters.Add("CUSTID", OracleDbType.Decimal).Value =Convert.ToDecimal(Session["ID"]);
cmd.ExecuteNonQuery();
}
我也試過modified_date=to_timestamp(:modified_date, 'MM/DD/YYYY HH:mi:ss')
但這會產生異常,因爲沒有格式正確的時區。
在C#中完成此操作的正確方法是什麼?應該總是使用字符串轉換來編寫日期/時間戳列?
這正是我需要的,它也回答了另一個問題,我有有關設置會話參數。謝謝!順便說一句,當我使用SYSTIMESTAMP我自動獲得正確的時區,所以我沒有真正需要使用'在時間ZONE'。再次感謝你。 – Mobilemike