【问题标题】:Gives ORA-01841: (full) year must be between -4713 and +9999, and not be 0 on Oracle select statement from on .net application给出 ORA-01841:(完整)年份必须介于 -4713 和 +9999 之间,并且在来自 .net 应用程序的 Oracle 选择语句上不能为 0
【发布时间】:2017-06-08 23:04:59
【问题描述】:
string vDate="2017/06/08";
OracleCommand cmd= new OracleCommand();
OracleParamater pDate= new OracleParameter("pDate",OracleDbType.Varchar2);
pDate.Direction=ParameterDirection.Input;
pDate.Value= vDate;
cmd.Parameters.Add(pDate);
cmd.CommandText="select * from testtable where joinDate<=to_date(:pDate, 'YYYY/MM/DD')";
cmd.CommandType=CommandType.Text;
DataSet ds= new DataSet();
OracleDataAdapter adp= new OracleDataAdapter(); //Please assume that db is connected successfully.
adp.fill(ds); 

joinDate 类型是 Date。

当应用程序执行查询时,它会给出 ora-01841 错误。我也尝试使用 OracleDBType.Date,将 vDate 分配为 DateTime 类型。我该如何解决这个问题?

您的帮助将不胜感激。

【问题讨论】:

  • 将参数添加到cmd对象的代码在哪里?
  • @flaZer 我已经更新了问题。
  • 在这里出局......也许在数据库中,JOINDATE 有 NULL 值,您找到真正的问题了吗?因为否则我看不到您的代码有问题。
  • "select * from testtable where nvl(joinDate,to_date(''1900/01/01'', 'YYYY/MM/DD'))
  • 我对 Oracle 日期也有点生疏...也许您甚至可以将其与零进行比较... 其中 joinDate = 0 或 joinDate。相当肯定(但不完全!)遇到第一个条件时的 SQL,不会尝试检查第二个条件,但同样,不完全确定......

标签: sql .net oracle date oracle-sqldeveloper


【解决方案1】:

我认为应该是OracleParameter("pDate",OracleDbType.date); 而不是new OracleParameter("pDate",OracleDbType.Varchar2)

【讨论】:

  • 我也尝试保留 OracleDbType.date。我认为 pDate 是一个参数,因此可以作为字符串发送并在查询时转换为 to_date。
  • 如果我尝试使用 OracleDbType Date,它会给我 Invalid Number 错误消息
【解决方案2】:

你最好这样使用它:

DateTime vDate = new DateTime(2017, 6, 8);
OracleCommand cmd= new OracleCommand();
cmd.CommandText="select * from testtable where joinDate <= :pDate";
OracleParamater pDate= new OracleParameter("pDate",OracleDbType.Date);
pDate.Direction=ParameterDirection.Input;
pDate.Value= vDate;
cmd.Parameters.Add(pDate);

【讨论】:

  • 我收到 ORA-01858:在需要数字的地方发现了一个非数字字符。我尝试在 c# 代码上对查询值进行硬编码,它在那里工作正常。
  • joinDate 真的是DATE吗?仔细检查您的代码是否有错别字。
  • 是的,现在是日期。
【解决方案3】:

如果您有其他参数,请确保它们的顺序正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多