ORA-01008,但所有变量都绑定并在Oracle SQL Developer中工作

本文关键字:Oracle SQL Developer 工作 绑定 变量 ORA-01008 | 更新日期: 2023-09-27 18:25:21

Command.CommandText = "SELECT SUM(REQHOURS), SUM(REQQUANTITY) / COUNT(*) 
    FROM ORDERS WHERE ORDERNUMBER = :OrderNumber AND 
    OPERATION = (SELECT MIN(OPERATION) FROM ORDERS 
    WHERE ORDERNUMBER = :OrderNumber AND OPERATION > :Operation)";
Command.Parameters.Add("OrderNumber", order.OrderNumber);
Command.Parameters.Add("Operation", order.Operation);

上面的查询在Oracle SQL Developer(OSQLD for FurtherReference(应用程序中运行良好,但是当我在C#中运行时,我收到以下错误:

ORA-01008:并非所有变量都绑定

当我在 C# 中调试部分查询时,我发现如果我删除AND OPERATION > :Operation查询会执行,但DataReader Null。如果我在 OSQLD 中运行它,我确实会得到值。

对于想知道的人来说,order.OrderNumberorder.Operation肯定不是Null.

我的应用程序中有多个查询,所有查询都工作正常。只有这个给我带来了问题。

ORA-01008,但所有变量都绑定并在Oracle SQL Developer中工作

经过一番思考,我基本上找到了解决方案......

我开始的代码如下:

Command.CommandText = "SELECT SUM(REQHOURS), SUM(REQQUANTITY) / COUNT(*) 
    FROM ORDERS WHERE ORDERNUMBER = :OrderNumber AND 
    OPERATION = (SELECT MIN(OPERATION) FROM ORDERS 
    WHERE ORDERNUMBER = :OrderNumber AND OPERATION > :Operation)";
Command.Parameters.Add("OrderNumber", order.OrderNumber);
Command.Parameters.Add("Operation", order.Operation);

在查询中有 3 个参数:OrderNumber两次,:Operation一次,所以我将这两个参数都添加到参数列表中。毕竟,您只需要在Oracle SQL Developer应用程序中将变量分配给参数一次。

这是棘手的部分。我之所以得到错误ORA-01008是有道理的。我得到了 3 个参数,但我只在参数列表中添加了 2 个参数,因此出现了错误。

下面的代码段不是查询的工作版本:

Command.CommandText = "SELECT SUM(REQHOURS), SUM(REQQUANTITY) / COUNT(*) 
    FROM ORDERS WHERE ORDERNUMBER = :OrderNumber AND 
    OPERATION = (SELECT MIN(OPERATION) FROM ORDERS 
    WHERE ORDERNUMBER = :OrderNumber AND OPERATION > :Operation)";
Command.Parameters.Add("OrderNumber", order.OrderNumber);
Command.Parameters.Add("OrderNumber", order.OrderNumber);
Command.Parameters.Add("Operation", order.Operation);

您需要使用 : 指定参数名称。我想你只是错过了,因为你提到你已经在:)工作查询了。所以在你的情况下:

Command.Parameters.Add(":OrderNumber", order.OrderNumber);
Command.Parameters.Add(":Operation", order.Operation);