Ошибка изменения параметра sql

1

Это мой рабочий код

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

Теперь он не работает. Должен ли я установить значение параметра согласно asending order

Теги:

1 ответ

1
Лучший ответ

Я заметил следующие части, где вам нужно подумать:

  1. ваш оператор select не содержит никаких полей для извлечения, попробуйте:

    SELECT  * FROM IBK_CO_USERS where ..... 
    

    или указать точные поля, которые вы хотите получить

  2. Вы никогда не открываете соединение: вы должны вызвать db.Open() (вы просто проверяете, открыт ли он)
  3. Обычно обычным способом получения результатов sqlreader является использование фрагмента:

     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;

результаты отличаются от предыдущих двух примеров

Однако в Oracle ODP.Net documentation что параметры связаны положением по умолчанию. Если вы хотите установить его привязкой по набору имен:

ocommand.BindByName = true;
  • 0
    Да, у кода есть некоторые проблемы. но мой вопрос, мы должны установить параметр в соответствии с запросом. мы можем изменить порядок параметров ??
  • 0
    @ArunaMadushan, надеюсь, мое редактирование поможет
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню