我需要在SQL查询WHERE子句中包含一些'TIMESTAMP'字段:
SELECT * FROM PERSON WHERE PSN_CREATED_DATE >= :createdPrior
在我的代码中, createdPrior 参数按以下方式定义
...
command.Parameters.Add(":createdPrior", Miscellaneous.convertToOracleTimeStamp(createdPrior));
...
static class Miscellaneous
{
public static OracleTimeStamp convertToOracleTimeStamp(DateTime dateTime)
{
OracleTimeStamp result = new OracleTimeStamp(dateTime);
return result;
}
}
结果我收到以下异常
异常:附加信息:ORA-00932:不一致的数据类型: 预计TIMESTAMP得到NUMBER
你能告诉我,如何在Oracle DB的SQL查询中传递DateTime吗?
P.S。 我尝试过的: - 我创建了一个具有特征的Oracle参数
OracleParameter para = new OracleParameter();
para.ParameterName = ":createdPrior";
para.Direction = System.Data.ParameterDirection.Input;
para.OracleDbType = OracleDbType.TimeStamp;
para.Value = Miscellaneous.convertToOracleTimeStamp(createdPrior);
- 我刚刚通过DateTime。我收到了另一个例外
- 我尝试将参数转换为DATE类型(使用to_date()方法),但在这种情况下,我似乎在丢失分钟和秒钟
答案 0 :(得分:3)
这样做:
SELECT * FROM PERSON WHERE PSN_CREATED_DATE >= TO_TIMESTAMP(:createdPrior, 'yyyyMMddHH24missffff')
或在C#中使用TimeStamp参数,应该是这样的
OracleParameter para = new OracleParameter(":createdPrior", OracleDbType.TimeStamp, ParameterDirection.Input);
para.Value = (Oracle.DataAccess.Types.OracleTimeStamp)value;
command.Parameters.Add(para);
答案 1 :(得分:0)
尝试使用OracleParameter
OracleParameter para = new OracleParameter();
para.ParameterName = ":createdPrior";
para.Direction = ParameterDirection.Input;
para.DbType = DbType.DateTime;
para.Value = value;
command.Parameters.Add(para);