小编Qui*_*ger的帖子

在c#中多次使用单个参数的更好方法

我是使用预准备语句查询数据库中的数据的新手,我遇到了为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用于查询的几个部分.在现实生活中,此查询多次使用相同的参数,并且必须添加多个具有相同名称和值的参数.

c# sql oracle prepared-statement

10
推荐指数
2
解决办法
5538
查看次数

标签 统计

c# ×1

oracle ×1

prepared-statement ×1

sql ×1