2012-03-06 1 views
4

단추 이벤트를 사용하여 SQL Server 데이터베이스 테이블에서 전체 행을 단순히 삭제하려고합니다. 지금까지 내 시도가 성공하지 못했습니다.SQL Server 테이블에서 행 삭제

public static void deleteRow(string table, string columnName, string IDNumber) 
{ 
    try 
    { 
    using (SqlConnection con = new SqlConnection(Global.connectionString)) 
    { 
     con.Open(); 
     using (SqlCommand command = new SqlCommand("DELETE FROM " + table + " WHERE " + columnName + " = " + IDNumber, con)) 
     { 
       command.ExecuteNonQuery(); 
     } 
     con.Close(); 
    } 
    } 
    catch (SystemException ex) 
     { 
     MessageBox.Show(string.Format("An error occurred: {0}", ex.Message)); 
     } 
    } 
} 

내가 오류가 발생 계속 : 이것은 내가 할 노력하고있어입니다

A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll An error occurred: Operand type clash: text is incompatible with int

테이블의 모든 열

TEXT 유형입니다. 왜 일치 항목을 찾기 위해 유형 string의 함수 인수를 열과 비교할 수 없습니까? (그리고 행을 삭제 하시겠습니까?)

+2

매개 변수를 사용해야합니다. –

+0

필자는 매개 변수 사용법을 모르는 중입니까? 자원? – ikathegreat

+1

또한, 참고로 : 우선, 당신은 더 이상 'TEXT'를 사용하면 안됩니다 - SQL Server 2005에서는 더 이상 사용되지 않습니다. 대신에'VARCHAR (MAX)'를 사용하십시오. 또한 : ** 모든 열을 갖는 ** VARCHAR (MAX)는 끔찍한 디자인의 냄새가납니다. ** 실제로 ** 각 열에 대해 2GB의 텍스트가 필요합니까? ** ?? 디자인 및 성능 팁 : 적절한 데이터 형식을 사용하십시오. –

답변

11

을 사용하여 연결을 종료 할 필요없이 시도, 그래서 거기 필요가있다 IDNumber 주위에 작은 따옴표를 사용하여 IDNumber를 텍스트로 사용하십시오 .....

public static void deleteRow(string table, string columnName, string IDNumber) 
    { 
    try 
    { 
    using (SqlConnection con = new SqlConnection(Global.connectionString)) 
    { 
     con.Open(); 
     using (SqlCommand command = new SqlCommand("DELETE FROM " + table + " WHERE " + columnName + " = '" + IDNumber+"'", con)) 
     { 
       command.ExecuteNonQuery(); 
     } 
     con.Close(); 
    } 
    } 
    catch (SystemException ex) 
     { 
     MessageBox.Show(string.Format("An error occurred: {0}", ex.Message)); 
     } 
    } 
} 
6

어느 IDNumber 대신 stringint, 또는 그것이 정말 string의 경우, 따옴표를 추가해야합니다.

더 나은 아직 매개 변수를 사용하십시오.

+0

일반 따옴표 (")를 사용합니다. 오류가 발생했습니다 : 잘못된 열 이름 '50012'. '50012는 IDNumber입니다. (문자열). – ikathegreat

+0

@ikathegreat - kashif 예제를 사용해보십시오. 매개 변수를 사용하면 이와 같은 데이터 형식을 사용하는 번거 로움을 피할 수 있으며, 다른 포스터에서 말한 것처럼 거의 모든 필드가 TEXT가되지 않도록 할 수 있습니다. –

1

IDNumber는 문자열입니다. 그 주위에 작은 따옴표가 필요합니다.

"DELETE FROM " + table + " WHERE " + columnName + " = '" + IDNumber + "'" 
+0

이 반환합니다. :'오류가 발생했습니다 : 데이터 형식 text와 varchar는 동등 연산자에서 호환되지 않습니다 .' – ikathegreat

1

당신은 "="와 함께 사용할 수 없습니다 TEXTVARCHAR(MAX). TEXT에 열에서 "COLUMNNAME"유형을 변경할 수 있습니다.
see this topic

3

있었던 파라미터

..................... 
..................... 

    using (SqlCommand command = new SqlCommand("DELETE FROM " + table + " WHERE " + columnName + " = " + @IDNumber, con)) 
      { 
        command.Paramter.Add("@IDNumber",IDNumber) 
        command.ExecuteNonQuery(); 
      } 

..................... 
..................... 

모든 열 이름은 TEXT 타입의 것을 언급했듯이 문

0
private void button4_Click(object sender, EventArgs e) 
{ 
    String st = "DELETE FROM supplier WHERE supplier_id =" + textBox1.Text; 

    SqlCommand sqlcom = new SqlCommand(st, myConnection); 
    try 
    { 
     sqlcom.ExecuteNonQuery(); 
     MessageBox.Show("delete successful"); 
    } 
    catch (SqlException ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 



private void button6_Click(object sender, EventArgs e) 
{ 
    String st = "SELECT * FROM suppliers"; 

    SqlCommand sqlcom = new SqlCommand(st, myConnection); 
    try 
    { 
     sqlcom.ExecuteNonQuery(); 
     SqlDataReader reader = sqlcom.ExecuteReader(); 
     DataTable datatable = new DataTable(); 
     datatable.Load(reader); 
     dataGridView1.DataSource = datatable; 
    } 
    catch (SqlException ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
}