【问题标题】:Oracle bound variablesOracle 绑定变量
【发布时间】:2013-09-07 05:45:24
【问题描述】:

我是使用绑定变量的新手,所以我有一个小问题 - 我在 .NET 应用程序中使用 Oracle DB 和 ODP.NET,并且我正在使用这样的绑定变量

string sql = "select * from table1 where loc=:pLoc and pno=:pPno and sno=:pSno union all select * from table2 where loc=:pLoc and pno=:pPno and sno=:pSno union all 
select * from table3 where loc=:pLoc and pno=:pPno and sno=:pSno";

    OracleCommand _cmd = new OracleCommand(sql, DBFacade.DbConnection);

                    OracleParameter pLoc = new OracleParameter(":pLoc", OracleDbType.Varchar2, 3);
                    pLoc.Value = loc;
                    OracleParameter pSno = new OracleParameter(":pSno", OracleDbType.Varchar2, 10);
                    pLoc.Value = sno;
                    OracleParameter pPno = new OracleParameter(":pPno", OracleDbType.Varchar2, 18);
                    pLoc.Value = pno;

                    _cmd.Parameters.Add(pLoc);
                    _cmd.Parameters.Add(pSno);
                    _cmd.Parameters.Add(pPno);

                    _odaContractPrices.SelectCommand = _cmd;

我已经在其他 sql 语句中成功地使用了绑定变量(在更简单的查询中,例如“select * from table1 where column1=:param1 and column2=:param2”),但由于某种原因,在这个语句中它不起作用。谁能解释我为什么? 非常感谢!

【问题讨论】:

  • “不起作用”是什么意思?有什么症状?
  • 我使用该适配器来填充数据集。 “不起作用”是指数据集是空的。
  • OracleCommand _cmd = new OracleCommand(sql, loc, sno, pno), DBFacade.DbConnection); 甚至无法编译。
  • 我的错误(复制粘贴错误)是:OracleCommand _cmd = new OracleCommand(sql, DBFacade.DbConnection);

标签: oracle variables binding


【解决方案1】:

我不确定这是错误的根源,但尝试删除 OracleParameter 构造函数中的 : 并使用

_cmd.BindByName = true;

实际上,我认为在您的情况下,以下内容就足够了:

_cmd.Parameters.Add("pLoc", loc);
_cmd.Parameters.Add("pSno", sno);
_cmd.Parameters.Add("pPno ", pno);

【讨论】:

  • @maephisto 只是为了添加一些注释,ODP 默认按顺序绑定“ODP.NET 允许您使用两种绑定变量模式:按位置绑定(默认)或按名称绑定”[@987654321 @这会引起很多混乱
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 2014-12-16
  • 2021-12-01
  • 2013-11-22
  • 1970-01-01
相关资源
最近更新 更多