ExecuteNonQuery не обновляет мою таблицу, пока я использую переменные связывания - PullRequest
1 голос
/ 05 июля 2019

Я использую этот код в c # для обновления моей таблицы:

public static int updateMytable(string accessCode, string response)
    {

        OracleConnection conn = DB.GetConnection();
        conn.Open();
        OracleCommand cmd = new OracleCommand();
        cmd.Connection = conn;
        cmd.CommandText = "update mytable set response_id= :p_response , response_date=sysdate  where access_code = :p_access_code";
        cmd.Parameters.Add("p_access_code", accessCode);

        cmd.Parameters.Add("p_response", response);
        cmd.CommandType = CommandType.Text;
        int res = cmd.ExecuteNonQuery(); 
        conn.Close();
        return res;

    }

код доступа varchar2

Когда я снимаю условие "где" все обновляет. Когда я использую строковую команду вместо переменных связывания, она тоже работает нормально.

string str = "update mytable set response_id= "+response+" , response_date=sysdate  where access_code = "+accessCode;

Не могли бы вы посоветовать?

1 Ответ

1 голос
/ 05 июля 2019

Добавить cmd.BindByName = true;, чтобы связать переменные (:p_response, :p_access_code) по их именам , а не позициям :

public static int updateMytable(string accessCode, string response) {
  if (string.IsNullOrEmpty(accessCode))
    return 0; 

  using (OracleConnection conn = DB.GetConnection()) {
    conn.Open();

    using (OracleCommand cmd = new OracleCommand()) {
      // When binding varaibles, use their names, not positions
      cmd.BindByName = true;
      cmd.Connection = conn;

      cmd.CommandText = 
        @"update mytable 
             set response_id   = :p_response, 
                 response_date =  sysdate  
           where access_code   = :p_access_code"; 

      cmd.Parameters.Add(":p_response", OracleDbType.Varchar2);
      cmd.Parameters.Add(":p_access_code", OracleDbType.Varchar2);   

      cmd.Parameters[":p_response"].Value = string.IsNullOrEmpty(response) 
        ? (object) (DBNull.Value) 
        : response;

      cmd.Parameters[":p_access_code"].Value = accessCode;  

      return cmd.ExecuteNonQuery();  
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...