OracleCommand 查询其中的空参数 - ORA-01008:并非所有变量都绑定
Posted
技术标签:
【中文标题】OracleCommand 查询其中的空参数 - ORA-01008:并非所有变量都绑定【英文标题】:OracleCommand Query Null parameters in where- ORA-01008: not all variables bound 【发布时间】:2013-03-08 11:00:10 【问题描述】:我有以下方法,两个参数都为空
bool hasValue = HasValue(null,null);
internal bool HasValue(int? param1, int? param2)
int count = 0;
using (var conn = new OracleConnection(connectionString))
using (var command = conn.CreateCommand())
command.CommandText = "select count(id) from Table1 "
+ "where ((Column1 = :PARAM1 and :PARAM1 Is Not Null) Or (Column1 Is Null and :PARAM1 Is Null)) "
+ "AND ((Column2 = :PARAM2 and :PARAM2 Is Not Null) Or (Column2 Is Null and :PARAM2 Is Null))";
command.Parameters.Add("PARAM1", OracleDbType.Int16, 0, param1, ParameterDirection.Input);
command.Parameters.Add("PARAM2", OracleDbType.Int16, 0,param2, ParameterDirection.Input);
command.Connection.Open();
count = Convert.ToInt16(command.ExecuteScalar());
command.Connection.Close();
return count > 0;
方法失败,出现以下错误“ORA-01008: not all variables bound”
如果我只使用一个参数,那么它很好,但是当我添加第二个参数时,它会失败并显示“ORA-01008:并非所有变量都绑定”
提前致谢
【问题讨论】:
【参考方案1】: command.CommandText = "select count(id) from Table1 "
+ "where decode(Column1, :PARAM1, 1) = 1 AND decode(Column2, :PARAM2, 1) = 1";
【讨论】:
感谢它适用于我的 int 列,但不适用于日期和字符串列 @Jeepers - 举个例子:你如何传递参数值以及返回什么错误。以上是关于OracleCommand 查询其中的空参数 - ORA-01008:并非所有变量都绑定的主要内容,如果未能解决你的问题,请参考以下文章
OracleCommand.CommandText 中的查询文本是不是有最大长度?
OracleCommand ExecuteScalar 有时返回 null
从 c# 执行写为 .sql 文件(例如:spool.sql)的 oracle spool 命令,就像使用 OracleCommand 执行任何 oracle 查询一样