2015-09-15 5 views
0

Когда я пишу этот запрос в коде на кнопку мыши, чтобы вставить mkey в xxacl_pn_new_cha_part_h таблице он дает мне ошибку, какQuery имеет некоторые проблемы

«ORA-00904:„A“: недопустимый идентификатор "

Вот мой код: -

try 
    { 
     conn.Open(); 
     OracleDataReader sdr = cmd.ExecuteReader(); 
     while (sdr.Read()) 
     { 
      cmd.CommandText = "insert into xxacl_pn_new_cha_part_h select sysdate, a.* from xxacl_pn_new_cha_part where mkey= " + sdr[0].ToString(); // this query gives error 
      cmd.ExecuteNonQuery(); 
      strQuery = "UPDATE xxacl_pn_new_cha_part set Rating='" + sdr[2].ToString() + "', RATING_UPDATE_DATE=convert(datetime,'" + System.DateTime.Now.ToString() + "',103) WHERE mkey = " + sdr[0].ToString(); 
      cmd.CommandText = strQuery; 
      cmd.ExecuteNonQuery(); 
     } 

     ScriptManager.RegisterStartupScript(this, GetType(), "alertMessage", "alert('Broker rating updated succesfully');", true); 

    } 

Я использую Oracle

UPDATE

protected void btnUpdate_Click(object sender, EventArgs e) 
{ 
    OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleConn"].ConnectionString); 
    string strQuery = "SELECT distinct ab.mkey, ab.broker_id,CASE WHEN SYSDATE - la.creation_date <= 180 THEN 'A' WHEN SYSDATE - cef_dt <= 30 THEN " + 
         "'B' ELSE 'C'END rating FROM xxacl_pn_new_cha_part ab,xxacl_pn_lease_det ld,xxacl_pn_leases_all la, " + 
         "xxcus.xxacl_pn_customer_enquiry_v ce WHERE ab.broker_id = ld.broker_id(+) AND ld.booking_no = la.booking_no(+) " + 
         " AND ab.broker_id = ce.broker_id(+)"; 

    OracleCommand cmd = new OracleCommand(); 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = strQuery; 
    cmd.Connection = conn; 
    try 
    { 
     conn.Open(); 
     OracleDataReader sdr = cmd.ExecuteReader(); 
     while (sdr.Read()) 
     { 
      cmd.CommandText = "insert into xxacl_pn_new_cha_part_h select sysdate, a.* from xxacl_pn_new_cha_part a where a.mkey= " + sdr[0].ToString(); 
      cmd.ExecuteNonQuery(); 
      strQuery = "UPDATE xxacl_pn_new_cha_part set Rating='" + sdr[2].ToString() + "', RATING_UPDATE_DATE=convert(datetime,'" + DateTime.Now.ToString() + "',103) WHERE mkey = " + sdr[0].ToString(); 
      cmd.CommandText = strQuery; 
      cmd.ExecuteNonQuery(); 
     } 

     ScriptManager.RegisterStartupScript(this, GetType(), "alertMessage", "alert('Broker rating updated succesfully');", true); 

    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     conn.Close(); 
     conn.Dispose(); 
    } 
} 
+0

Лучше писать имена столбцов вместо * \ – Imad

ответ

1

Вы пропускаете имя псевдонима здесь, попробуйте это один

cmd.CommandText = "insert into xxacl_pn_new_cha_part_h select sysdate, a.* from xxacl_pn_new_cha_part a where a.mkey= " + sdr[0].ToString(); 

UPDATE:

protected void btnUpdate_Click(object sender, EventArgs e) 
{ 
    OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleConn"].ConnectionString); 
    string strQuery = "SELECT distinct ab.mkey, ab.broker_id,CASE WHEN SYSDATE - la.creation_date <= 180 THEN 'A' WHEN SYSDATE - cef_dt <= 30 THEN " + 
         "'B' ELSE 'C'END rating FROM xxacl_pn_new_cha_part ab,xxacl_pn_lease_det ld,xxacl_pn_leases_all la, " + 
         "xxcus.xxacl_pn_customer_enquiry_v ce WHERE ab.broker_id = ld.broker_id(+) AND ld.booking_no = la.booking_no(+) " + 
         " AND ab.broker_id = ce.broker_id(+)"; 

    OracleCommand cmd = new OracleCommand(); 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = strQuery; 
    cmd.Connection = conn; 
    try 
    { 
     conn.Open(); 
     OracleDataReader sdr = cmd.ExecuteReader(); 
     while (sdr.Read()) 
     { 
      cmd.CommandText = "insert into xxacl_pn_new_cha_part_h select 0, sysdate, a.* from xxacl_pn_new_cha_part a where a.mkey= " + sdr[0].ToString(); 
      cmd.ExecuteNonQuery(); 
      strQuery = "UPDATE xxacl_pn_new_cha_part set Rating='" + sdr[2].ToString() + "', RATING_UPDATE_DATE=to_date('" + DateTime.Now.ToString() + "','dd-mm-yyyy hh:mi:ss am') WHERE mkey = " + sdr[0].ToString(); 
      cmd.CommandText = strQuery; 
      cmd.ExecuteNonQuery(); 
     } 

     ScriptManager.RegisterStartupScript(this, GetType(), "alertMessage", "alert('Broker rating updated succesfully');", true); 

    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     conn.Close(); 
     conn.Dispose(); 
    } 
} 
+0

теперь получать ошибку как «ORA-00947: недостаточно значений» – BNN

+0

Это означает, что количество столбцов в 'xxacl_pn_new_cha_part_h' больше, чем количество столбцов, возвращаемых из' select sysdate, а. * '. Проверьте запрос еще раз. – San

+0

@nadeem проверить отсутствие столбца, присутствующего в двух таблицах xxacl_pn_new_cha_part_h и xxacl_pn_new_cha_part, а также проверить типы данных столбцов. – Buddi

1

Вы пропустили имя псевдонима таблицы

"insert into xxacl_pn_new_cha_part_h select sysdate, a.* from xxacl_pn_new_cha_part a where a.mkey= " + sdr[0].ToString(); 
Смежные вопросы