当前位置: 首页 > 面试题库 >

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

艾嘉石
2023-03-14
问题内容

我是使用准备好的语句从数据库查询数据的新手,并且在实现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在查询的多个部分中使用。在现实生活中,此查询已多次使用相同的参数,因此不得不添加多个具有相同名称和值的参数是一件很痛苦的事情。


问题答案:

我之前遇到过同样的问题,而IIRC则解决了这个问题:

cmd.BindByName = true;

编辑:我刚刚重新检查,这确实允许您设置一次参数值,即使在查询中可能多次指定了参数也是如此。唯一的其他东西,我做不同的你的是,我有一个领先指定参数名称:,例如:param



 类似资料:
  • 作为开发团队的一部分,我们希望构建一个非阻塞应用程序,因为我们正在使用SpringReactor 3构建我们的应用程序。因此,在使用project reactor时,我有一系列问题: > 在单个管道和

  • 问题内容: 我将Express与Node一起使用,并且我有一个要求用户可以将URL请求为:。 这样的请求将返回JSON响应。 上述调用之前的JSON数据如下: 通过上述请求,响应JSON数据应为: 我已经配置了Express路由,如下所示: 但这是行不通的。我不确定如何传递多个参数,也就是说,我不确定是否正确的方法。是吗? 问题答案: 如果那不起作用,请尝试使用console.log(req.pa

  • 问题内容: 我正在尝试为我的数据库实现一个非常基本的搜索引擎,其中用户可能包含各种信息。搜索本身包含几个联合选择,其中结果总是合并为3列。 但是,返回的数据是从不同的表中获取的。 每个查询都使用$ term进行匹配,并将其绑定到“:term”作为预备参数。 现在,该手册说: 调用PDOStatement :: execute()时,对于要传递给语句的每个值,必须包含一个唯一的参数标记。您不能在准备

  • 问题内容: 假设我有这个功能: 我想这样称呼它: 当然,不能用这种方法来完成,因为Postgres试图用该名称和三个不存在的参数来查找函数。 我试图用引号引起来,但在这种情况下,参数解释错误: data1’,’data2’,’data3 ,就像一个字符串一样。 有没有一种方法可以在参数中放置多个值,以便IN子句可以识别它? 问题答案: 您的函数将不会被创建。之后是句法废话。 无论哪种方式,带有 参

  • 问题内容: 我想知道的是,在使用SpringMVC和Spring表单时,是否有一种更简单/更好的方式来处理动态表单(通过js向dom添加表单项)? 具有具有多个LineItem的Invoice对象的图像。 显示属于我当前使用的发票的项目 要添加LineItem,我需要一些js来计算新索引并将其添加到DOM。删除LineItem时,我目前必须对所有索引重新编号,这是我要避免的部分,这可能吗? 问题答