我正在尝试更新具有 type 列的表TIMESTAMP(0) WITH TIMEZONE
。
我尝试了几种方法都没有成功,因为TIMESTAMP
写入数据库的方式没有偏移格式,例如-05:00
美国东部时间。它被保存AMERICA/NEW_YORK
为时区,这会导致无法正确处理此问题的另一个应用程序出现问题。
当前的:28-NOV-16 10.51.43.000000000 AM AMERICA/NEW_YORK
期望: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# 中完成此任务的正确方法是什么?日期/时间戳列是否应该始终使用字符串转换来写入?