我刚开始使用准备好的语句从数据库查询数据,并且在实现 C# 参数(特别是 OracleParameters)时遇到问题。
假设我有以下 SQL:
string sql = "select *
from table1 t1, table2 t2
where t1.columnX = @parm and t2.columnY = @parm"
代码是这样的:
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
问题是,当 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));
另一个解决方案是这样的:
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm1", strParm));
cmd.Parameters.Add(new OracleParameter("@parm2", strParm));
修改后的sql是这样的:
string sql = "select *
from table1 t1, table2 t2
where t1.columnX = @parm1 and t2.columnY = @parm2"
问题是,是否有更好的方法来执行此操作,以便我不必添加具有相同值的另一个参数。
注意:我刚刚简化了上面的查询,以显示 @parm 在查询的多个部分中使用。在现实生活中,此查询多次使用相同的参数,并且必须添加多个具有相同名称和值的参数是一件痛苦的事情。