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 SQL 参数绑定

OracleCommand.CommandText 中的查询文本是不是有最大长度?

如何处理参数化查询中的空用户输入?

OracleCommand ExecuteScalar 有时返回 null

从 c# 执行写为 .sql 文件(例如:spool.sql)的 oracle spool 命令,就像使用 OracleCommand 执行任何 oracle 查询一样

存储过程中的空参数