sql参数更改错误

Posted

技术标签:

【中文标题】sql参数更改错误【英文标题】:sql parameter changing error 【发布时间】:2014-06-04 07:25:45 【问题描述】:

这是我的工作代码

strQuery = @"SELECT FROM IBK_CO_USERS where upper(user_id)= upper(:userid) AND co_id= :Com_Id";


  ocommand = new OracleCommand();
  if (db.GetConnection().State == ConnectionState.Open)
  
   ocommand.CommandText = strQuery;
   ocommand.Connection = db.GetConnection();
   ocommand.Parameters.Add("userid", OracleDbType.Varchar2);
   ocommand.Parameters["userid"].Value = userID;
   ocommand.Parameters.Add("Com_Id", OracleDbType.Varchar2);
   ocommand.Parameters["Com_Id"].Value = Comid;
   odatareader = ocommand.ExecuteReader();
   odatareader.Read();
  

我又这样变了

  ocommand.Parameters.Add("Com_Id", OracleDbType.Varchar2);
  ocommand.Parameters["Com_Id"].Value = Comid;
  ocommand.Parameters.Add("userid", OracleDbType.Varchar2);
  ocommand.Parameters["userid"].Value = userID;`

现在不工作了。我应该按照发送顺序设置参数值

【问题讨论】:

【参考方案1】:

我注意到您需要考虑以下部分:

    您的选择语句也不包含任何要检索的字段 试试:

    SELECT  * FROM IBK_CO_USERS where ..... 
    

    或指定您要获取的确切字段

    你永远不会打开连接:你必须打电话给db.Open()(你只需检查它是否打开)

    通常获取 sqlreader 结果的正常方法是使用 sn-p:

     odatareader = ocommand.ExecuteReader();
     while (odatareader.Read())
     
      /// Fetch your data
     
    

一般来说,只要你设置了一个参数名和值,并且你将这两个配对在一起,instatination的顺序就没有任何作用,例如:

  ocommand.Parameters.Add("Com_Id", OracleDbType.Varchar2);
  ocommand.Parameters["Com_Id"].Value = Comid;
  ocommand.Parameters.Add("userid", OracleDbType.Varchar2);
  ocommand.Parameters["userid"].Value = userID;

相当于:

  ocommand.Parameters.Add("userid", OracleDbType.Varchar2);
  ocommand.Parameters["userid"].Value = userID;
  ocommand.Parameters.Add("Com_Id", OracleDbType.Varchar2);
  ocommand.Parameters["Com_Id"].Value = Comid;

获得不同结果的唯一方法是更改​​名称-值对,例如:

  ocommand.Parameters.Add("userid", OracleDbType.Varchar2);
  ocommand.Parameters["userid"].Value = Comid;
  ocommand.Parameters.Add("Com_Id", OracleDbType.Varchar2);
  ocommand.Parameters["Com_Id"].Value = userID;

结果与前 2 个示例不同

但是在Oracle ODP.Net documentation 中,默认情况下参数是由位置绑定的。如果要将其设置为由名称集绑定:

ocommand.BindByName = true;

【讨论】:

是的代码有一些问题。但我的问题是我们是否应该根据查询设置参数。我们可以更改参数顺序吗?? 我在 oracle DB 中工作,当我使用第二种方法时它不起作用

以上是关于sql参数更改错误的主要内容,如果未能解决你的问题,请参考以下文章

初始化参数文件修改错误导致Oracle无法startup

Apache Dbutils 在更新 Sql 中更改列名

各位大侠,请教个oracle问题,执行一段代码出现错误,希望各位给出解决办法,谢谢谢!

当优化器参数更改(ON/OFF)时,HAWQ 为相同的 sql 返回不同的输出

Oracle SQL Developer 12505 网络更改后的错误

如果主键更改,SQL 更新触发器会引发错误