【问题标题】:sql parameter changing errorsql参数更改错误
【发布时间】: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;`

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

【问题讨论】:

    标签: c# sql oracle


    【解决方案1】:

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

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

      SELECT  * FROM IBK_CO_USERS where ..... 
      

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

    2. 你永远不会打开连接:你必须打电话给db.Open()(你只需检查它是否打开)
    3. 通常获取 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 中工作,当我使用第二种方法时它不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多