Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# sql参数更改错误_C#_Sql_Oracle - Fatal编程技术网

C# sql参数更改错误

C# sql参数更改错误,c#,sql,oracle,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.C

这是我的工作代码

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;`

现在它不起作用了。我是否应该按照发送顺序设置参数值?我注意到您需要考虑的以下部分:

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

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

  • 您从未打开连接:您必须调用
    db.open()
    (您只需检查它是否打开)
  • 通常,获取sqlreader结果的常规方法是使用 片段:

  • 通常,只要设置一个参数名称和值,并将这两个参数配对,不稳定的顺序就不会起任何作用,例如:

      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文档中,默认情况下,参数是通过位置绑定的。如果要将其设置为按名称集绑定:

    ocommand.BindByName = true;
    

    是的,代码有一些问题。但我的问题是,我们是否应该根据查询设置参数。我们可以更改参数顺序吗?我在oracle数据库中工作,当我使用第二种方式时,它不工作
      ocommand.Parameters.Add("userid", OracleDbType.Varchar2);
      ocommand.Parameters["userid"].Value = Comid;
      ocommand.Parameters.Add("Com_Id", OracleDbType.Varchar2);
      ocommand.Parameters["Com_Id"].Value = userID;
    
    ocommand.BindByName = true;