这是我第一次与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(....)”行中的任何一行,则查询成功完成。
如果仅使用两个参数而不使用三个参数进行查询,为什么查询会正常运行?我收到的错误甚至没有任何意义
oracle的ODP.Net提供程序默认使用按位置绑定。更改行为以按名称绑定。将属性BindByName设置为true。比您可以忽略参数的双重定义。
using(OracleCommand cmd = con.CreateCommand()) { ... cmd.BindByName = true; ... }