2013-06-20 2 views
2

id_curse을 기반으로 전체 행을 삭제하려고 할 때 문제가 있습니다. 이것은 내 코드이며,이 내가 얻을 내 오류입니다 :C#에서 Oracle 데이터베이스에서 행을 삭제하려면 어떻게해야합니까?

유형의 처리되지 않은 예외 'Oracle.DataAccess.Client.OracleException는'Oracle.DataAccess.dll 발생했습니다.

추가 정보 :

외부 구성 요소는 예외를 던졌다.

문제를 해결하도록 도와 줄 수 있습니까? SQL 명령의 코드가 좋지 않다고 생각합니다.

private void button3_Click(object sender, EventArgs e) 
{ 
    Oracle.DataAccess.Client.OracleConnection conn = new Oracle.DataAccess.Client.OracleConnection(provider); 
    Oracle.DataAccess.Client.OracleCommand cmd = new Oracle.DataAccess.Client.OracleCommand(); 

    conn.Open(); 
    cmd = new Oracle.DataAccess.Client.OracleCommand(" DELETE * from CURSE WHERE ID_CURSA = '" + textBox1.Text + "'", conn); 
    cmd.ExecuteNonQuery(); 
} 
+2

코드가 매우 안전하지 않습니다! SQL 인젝션 및 SQL 인젝션으로부터 보호하는 방법을 읽어보십시오. – Arran

+0

무엇이 innerexception입니까? –

답변

9

DELETE 구문은 다음

DELETE from CURSE WHERE ID_CURSA = xxxxx 
    ^no * here 

입니다하지만 당신은 매개 변수가있는 쿼리하지 문자열 회씩 연결을 사용해야합니다. 문자열 연결은 (하지 인정 인용 부호, 소수점 및 날짜와 문자열) Sql Injection 및 구문 분석 문제 보조 노트, 당신은 ID_CURSA 텍스트 데이터베이스 필드임을 확신으로

string cmdText = "DELETE from CURSE WHERE ID_CURSA = :ID" 
using(OracleConnection conn = new OracleConnection(provider)) 
using(OracleCommand cmd = new OracleCommand(cmdText, conn)) 
{ 
    conn.Open(); 
    cmd.Parameters.AddWithValue("ID", textBox1.Text); 
    cmd.ExecuteNonQuery(); 
} 

로 연결?

+1

+1 올바른 솔루션과 SQL 주입으로부터 차폐 –

0

이 예외를 catch하고 무엇이 잘못되었는지에 대한 자세한 내용을 확인하려면 코드 주위에 시도 - 캐치 마침내 문을 가져 오기 (I 그 가정 있도록 값 주위에 텍스트 필드를 인용한다 가하고 있습니다) :

private void button3_Click(object sender, EventArgs e) 
{ 
    Oracle.DataAccess.Client.OracleConnection conn = new Oracle.DataAccess.Client.OracleConnection(provider); 
    Oracle.DataAccess.Client.OracleCommand cmd = new Oracle.DataAccess.Client.OracleCommand(); 

    try 
    { 
     conn.Open(); 
     cmd = new Oracle.DataAccess.Client.OracleCommand(" DELETE * from CURSE WHERE ID_CURSA = '" + textBox1.Text + "'", conn); 
     cmd.ExecuteNonQuery(); 
    } 
    catch(Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
     if(ex.InnerException != null) 
      MessageBox.Show(ex.InnerException.Message); 
    } 
    finally 
    { 
     conn.Close(); 
    } 
} 
관련 문제