gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:02:18 24 4
gpt4 key购买 nike

我是使用准备好的语句从数据库中查询数据的新手,我在为 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: not all variables bound”的异常。

在我看来,即使在 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 在查询的几个部分中使用。在现实生活中,此查询多次使用相同的参数,并且必须添加多个具有相同名称和值的参数是一件痛苦的事情。

最佳答案

我以前遇到过同样的问题,IIRC 解决了它:

cmd.BindByName = true;

编辑:我刚刚重新检查过,这确实允许您设置一次参数值,即使在查询中可能多次指定该参数。唯一与您不同的是,我使用前导 : 指定参数名称,例如 :param

关于c# - 在 C# 中多次使用单个参数的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com