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

本文关键字:oracle 错误 设置 日期 使用 | 更新日期: 2023-09-27 18:14:55

整个上午都在寻找这个问题的答案,但没有找到适合我的任何东西。我使用这段代码试图更改oracle数据库中的日期值,但一直得到oracle错误'ORA-1843: not a valid month':

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的日期格式,但不知道如何。

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

日期没有格式,它们是二进制值,就像小数,双精度,浮点数一样。格式只有在呈现为字符串或从字符串解析时才有意义。

假设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。试图确定两层以下的格式,特别是在web应用程序中,既不容易也不安全。

在您的示例中,您可以在输入表单上使用DatePicker或Calendar控件来作为DateTime对象检索闭包日期,然后将其传递给数据访问代码。