2014-05-01 2 views
0

그래서이 코드는 내 목록 상자에서 선택된 것으로 판단하여 mySQL 서버 데이터베이스의 행을 삭제하도록 설계되었습니다. 다음은 행을 제거해야하는 코드입니다.SQL 행이 삭제되지 않습니다

private void remove_btn_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (Calls_lsb.SelectedItem == null) 

       MessageBox.Show("Please select an item for deletion."); 
      } 
      else 
      { 
       int i = Calls_lsb.SelectedIndex; 
       if (i > 0) 
       { 
        SqlConnection connection = new SqlConnection(//My Connection String); 
        string sqlStatement1 = "DELETE FROM Records WHERE CallID = @Id"; 
        string sqlStatement2 = "DELETE FROM Calls WHERE CallID = @Id"; 

        connection.Open(); 
        SqlCommand cmd1 = new SqlCommand(sqlStatement1, connection); 
        cmd1.Parameters.AddWithValue("@Id", Calls_lsb.Items[i]); 
        cmd1.ExecuteNonQuery(); 
        SqlCommand cmd2 = new SqlCommand(sqlStatement2, connection); 
        cmd2.Parameters.AddWithValue("@Id", Calls_lsb.Items[i]); 
        cmd2.ExecuteNonQuery(); 
        connection.Close(); 

        Calls_lsb.Items.Remove(Calls_lsb.Items[i]); 
       } 
       else 
       { 
       } 
      } 
     } 
     catch (Exception ex) 
     { 

      MessageBox.Show(ex.ToString()); 
     } 
    } 

예외가 없으며 잘 작동하는 레코드를 추가하는 비슷한 코드가 있습니다. 코드를 밟아 보았지만 모두 괜찮아 보였다. 단순히 데이터베이스에서 행을 삭제하지 않습니다. 데이터베이스가 아닌 목록에서 올바른 항목을 제거합니다.

누군가가이 상황에 대한 어떤 빛을 밝힐 수 있다면 좋을 것입니다. 감사합니다!

편집 : 좋아, 문제가 해결 된 것 같습니다. 나는 전체 i = 선택된 색인 항목을 제거하고 'Calls_lsb.Items [i]'를 '(Calls_lsb.SelectedIndex + 1)'로 바꿉니다. 나는 기본적으로 같은 것을하고 있기 때문에 1을 i에 추가하려고했을 때 왜 예외가 발생하는지 이해하지 못한다.

+2

십니까? 연결 문자열이 맞습니까? SQL 서버 관리 스튜디오에서'DELETE' 문을 시도 했습니까? 그것에서 효과가 있습니까? –

+0

좋은 지적, 나는 단지 SQL에 대한 쿼리를 테스트하고 효과가 있었다. 내가 다시 밟은 그리고 그것은 내가 0 인 것 같습니다 내 CallID 1입니다 상관 관계가 있습니다. 나는 인덱스에 1을 추가하려고 조금 주위를 망쳐 봤지만 인수 값이 '1'이라는 ArgumentOutOfRangeException이 있습니다. 인덱스 값이 아닙니다. 어떤 아이디어? –

+0

Calls_lsb.Items에 몇 개의 항목이 있습니까? 1 개의 항목 만있는 경우 0을 기준으로 인덱스가 0이됩니다. – sr28

답변

0

다음 줄 코드를 바꾸십시오.

cmd1.Parameters.AddWithValue("@Id", Calls_lsb.Items[i]); 
    //with 
    cmd1.Parameters.AddWithValue("@Id", Calls_lsb.Items[i].Value); 

cmd2.Parameters.AddWithValue("@Id", Calls_lsb.Items[i]); 

// [I] '정확히 Calls_lsb.Items'의 값이 무엇

cmd2.Parameters.AddWithValue("@Id", Calls_lsb.Items[i].Value); 
+0

'.Value'를 추가하면 오류가 발생하고 내 인텔리 센스의 일부가 아닙니다. '개체'에는 '값'에 대한 정의가 없습니다. –

+0

"Calls_lsb.Items [i]"Calls_lsb 무엇인지 이해해 주시겠습니까? DropDownList의 대상입니까? 옳은? – Harikant

+0

Calls_lsb.Items [i]는 목록 상자에서 선택한 항목 색인입니다. –

관련 문제