admin

Oracle``RA-01008:并非所有变量都绑定在一起''。带有参数的错误

sql

这是我第一次与Oracle打交道,并且很难理解为什么会收到此错误。

我在查询的where子句中使用带有以下代码的Oracle ODT.NET w / C#:

WHERE table.Variable1 = :VarA
  AND (:VarB IS NULL OR table.Variable2 LIKE '%' || :VarB || '%')
  AND (:VarC IS NULL OR table.Variable3 LIKE :VarC || '%')

并且我像这样添加参数值:

cmd.Parameters.Add("VarA", "24");
cmd.Parameters.Add("VarB", "test");
cmd.Parameters.Add("VarC", "1234");

当我运行此查询时,服务器返回:

ORA-01008: not all variables bound

如果我注释掉“ AND(....)”行中的任何一行,则查询成功完成。

如果仅使用两个参数而不使用三个参数进行查询,为什么查询会正常运行?我收到的错误甚至没有任何意义


阅读 164

收藏
2021-05-10

共1个答案

admin

oracle的ODP.Net提供程序默认使用按位置绑定。更改行为以按名称绑定。将属性BindByName设置为true。比您可以忽略参数的双重定义。

using(OracleCommand cmd = con.CreateCommand()) {
    ...
    cmd.BindByName = true;
    ...
}
2021-05-10