Oracle ORA-01840:在使用时间戳参数执行查询时,输入值的长度不足以使用日期格式

Oracle ORA-01840:在使用时间戳参数执行查询时,输入值的长度不足以使用日期格式,oracle,timestamp,odp.net,Oracle,Timestamp,Odp.net,我正在尝试使用odp.net对带有时间戳(6)列的Oracle数据库表执行查询 我正在使用下面的代码,它抛出了这个异常:“ORA-01840:输入值不够长,不能用于日期格式” 这个查询及其参数有什么问题?我还尝试了OracleDbType.Date,而不是OracleDbType.TimeStamp,但我得到了相同的错误。我通过传递OracleTimeStamp对象而不是DateTime对象解决了这个问题。下面的代码运行良好: OracleConnection con = new OracleC

我正在尝试使用odp.net对带有时间戳(6)列的Oracle数据库表执行查询

我正在使用下面的代码,它抛出了这个异常:“ORA-01840:输入值不够长,不能用于日期格式”


这个查询及其参数有什么问题?我还尝试了OracleDbType.Date,而不是OracleDbType.TimeStamp,但我得到了相同的错误。

我通过传递OracleTimeStamp对象而不是DateTime对象解决了这个问题。下面的代码运行良好:

OracleConnection con = new OracleConnection(connStr");
using (con)
{
   con.Open();
   OracleCommand command = con.CreateCommand();
   command.CommandText = "SELECT * FROM Logs WHERE LOGDATE > :logDate";
   command.CommandType = System.Data.CommandType.Text;
   command.Parameters.Add(new OracleParameter("logDate", OracleDbType.TimeStamp, new OracleTimeStamp(DateTime.Now.AddMonths(-1)), ParameterDirection.Input));

   using (command)
   {
      OracleDataReader rdr = command.ExecuteReader(); //ORA-01840 exception was thrown here
   }
}

日志
是表还是视图?您的代码看起来不错,您是否尝试直接在sqldeveloper/sql plus中检查查询?Logs是一个表,LOGDATE是一个时间戳(6)列。当我使用TOAD执行查询时,它工作得很好,但我认为问题在于参数绑定。
OracleConnection con = new OracleConnection(connStr");
using (con)
{
   con.Open();
   OracleCommand command = con.CreateCommand();
   command.CommandText = "SELECT * FROM Logs WHERE LOGDATE > :logDate";
   command.CommandType = System.Data.CommandType.Text;
   command.Parameters.Add(new OracleParameter("logDate", OracleDbType.TimeStamp, new OracleTimeStamp(DateTime.Now.AddMonths(-1)), ParameterDirection.Input));

   using (command)
   {
      OracleDataReader rdr = command.ExecuteReader(); //ORA-01840 exception was thrown here
   }
}