想问一下秋大和其他朋友,有没有遇到过这样的问题。在查询oracle数据库中,参数化日期时间类型时,在执行action.Select(where);时,Oracle报如下需错误。
System.Exception
HResult=0x80131500
Message=V5.7.4.4 Error : Oracle Call Function::ExeDataReader():ORA-01745: 无效的主机/绑定变量名
Oracle.cyora.SQL:
select * from CONTAINER where REC_DATE between :start and :end
Para: start-> 2018/5/1 0:00:00
Para: end-> 2018/5/15 0:00:00
ExeDataReader():ORA-01745: 无效的主机/绑定变量名。
MDataTable mData = new MDataTable(); using (MAction action = new MAction("Container")) { string where = "REC_TIME between to_date( :start, 'yyyy-MM-dd' ) and to_date( :end, 'yyyy-MM-dd')"; action.SetPara(":start","2018-05-01", DbType.String); action.SetPara(":end", "2018-05-15", DbType.String);
//如果采用字符串拼接的where条件,则可以正常执行。
//string where = string.Format("REC_TIME between to_date( '{0}', 'yyyy-MM-dd' ) and to_date( '{1}', 'yyyy-MM-dd')", "2018-05-01", "2018-05-15");
mData = action.Select(where); } string str = mData.ToJson();
原来是参数化的变量命名占用了oracle的关键字。是一个低级错误!
问问CYQ群里的群主