整个上午都在寻找答案,但没有发现任何对我有用的东西。我正在使用此代码尝试更改oracle数据库中的日期值,但不断收到oracle错误“ORA-1843:不是有效月份”:
using Oracle.DataAccess.Client;
OracleConnection closeDate = new OracleConnection(oradb);
OracleParameter[] prm = new OracleParameter[2];
closeDate.Open();
OracleCommand cmd = new OracleCommand();
prm[0] = cmd.Parameters.Add("paramDate",
OracleDbType.Date, "05/02/2015", ParameterDirection.Input);
prm[1] = cmd.Parameters.Add("paramCRN", OracleDbType.Varchar2, "16118009",
ParameterDirection.Input);
cmd.Connection = closeDate;
cmd.CommandText = "update vec_complaint set CLOSURE_DATE = :1 where ID = :2";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
closeDate.Close();
closeDate.Dispose();
我猜我需要以某种方式说明DD / MM / YYYY的日期格式,但无法弄清楚如何。
答案 0 :(得分:3)
日期没有格式,它们是二进制值,就像小数,双精度,浮点数一样。格式只有在它们被渲染为字符串或从字符串中解析时才有意义。
假设CLOSURE_DATE
是日期类型列,而不是(n)varchar字段,您只需将DateTime对象作为参数值传递:
var myDate=new DateTime(2015,09,29);
prm[0] = cmd.Parameters.Add("paramDate", OracleDbType.Date, myDate,
ParameterDirection.Input);
事实上,总是传递DateTime对象而不是日期或时间字符串是一种好习惯。当您知道文本格式和/或用户区域设置是什么时,应在输入时立即将文本解析为DateTime或TimeSpan。尝试确定2层格式,特别是在Web应用程序中,既不容易也不安全。
在您的情况下,您可以使用输入表单上的DatePicker或Calendar控件将关闭日期作为DateTime对象检索,然后将其传递给数据访问代码。