sql参数更改错误

时间:2014-06-04 07:25:46

标签: c# sql oracle

这是我的工作代码

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 个答案:

答案 0 :(得分:1)

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

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

    SELECT  * FROM IBK_CO_USERS where ..... 
    

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

  2. 您永远不会打开连接:您必须致电db.Open()(您只需检查它是否已打开)
  3. 通常,获取sqlreader结果的常用方法是使用 片段:

     odatareader = ocommand.ExecuteReader();
     while (odatareader.Read())
     {
      /// Fetch your data
     }
    
  4. 一般情况下,只要你设置一个参数名称和值并将这两个配对在一起,就不会发挥任何作用,例如:

      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;
    

    结果与前两个例子不同

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

    ocommand.BindByName = true;