尝试使用c#设置日期时出现oracle错误

时间:2015-09-29 10:43:22

标签: c# sql oracle date

整个上午都在寻找答案,但没有发现任何对我有用的东西。我正在使用此代码尝试更改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的日期格式,但无法弄清楚如何。

1 个答案:

答案 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对象检索,然后将其传递给数据访问代码。