我是使用预准备语句查询数据库中的数据的新手,我遇到了为c#专门为OracleParameters实现参数的问题.
所以假设我有以下SQL:
string sql = "select *
from table1 t1, table2 t2
where t1.columnX = @parm and t2.columnY = @parm"
Run Code Online (Sandbox Code Playgroud)
代码是这样的:
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
Run Code Online (Sandbox Code Playgroud)
问题是当执行cmd时t1.columnX获取strParm的值但是当t2.columnY即将获得strParm的值时,它会抛出"ORA-01008:并非所有变量绑定"异常.
在我看来,即使该参数在sql中的其他位置被看到,该参数也只被替换一次.
我试过并为我工作的一个解决方案是:
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是:
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm1", strParm));
cmd.Parameters.Add(new OracleParameter("@parm2", strParm));
Run Code Online (Sandbox Code Playgroud)
和修改过的sql是这样的:
string sql = "select *
from table1 t1, table2 t2
where t1.columnX = @parm1 and t2.columnY = @parm2"
Run Code Online (Sandbox Code Playgroud)
问题是,是否有更好的方法,这样我就不必添加具有相同值的另一个参数.
注意:我刚刚简化了上面的查询,以显示@parm用于查询的几个部分.在现实生活中,此查询多次使用相同的参数,并且必须添加多个具有相同名称和值的参数.