2013-05-20 4 views
0

ID 열 (aitisi_ID)과 범주 열 (kat_aitisis)이있는 데이터베이스를 만들었습니다. 문자열 (kat1)을 사용하여 listBox에 나타나는 모든 ID에 대해 kat_aitisis 열을 업데이트하고 싶습니다.C# 목록 상자의 모든 항목에 대한 데이터베이스 업데이트

편집 2 : 열 'aitisi_ID가'나는 지금까지이 int

이지만, 일을 나던 (SqlCommand를 CN 내도록 SqlConnection이고 cmd를입니다) :

// Edit: This is the code that I use to add Items to my listBox 
private void loadlist() 
    { 
     listBox1.Items.Clear(); 
     listBox2.Items.Clear(); 
     cn.Open(); 
     string kat = "Εγκυρη"; 
     cmd.CommandText = ("SELECT aitisi_ID,moria FROM Table2 WHERE kat_aitisis='"+kat+"' ORDER BY moria DESC"); 
     dr = cmd.ExecuteReader(); 
     if (dr.HasRows) 
     { 
      while (dr.Read()) 
      { 
       listBox1.Items.Add(dr[0].ToString()); 
       listBox2.Items.Add(dr[1].ToString()); 
      } 
     } 
     cn.Close(); 
    } 


string kat1 = "aaaaa"; 

     cn.Open(); 
     for (int i = 0; i < listBox1.Items.Count; i++) 
     { 

      listBox1.SetSelected(i, true); 
      cmd.CommandText = "UPDATE Table2 SET kat_aitisis='"+kat1+"' WHERE aitisi_ID='"+listBox1.SelectedIndex+"'"; 
      cmd.ExecuteNonQuery(); 
      cmd.Clone(); 

     } 
     cn.Close(); 
+0

정확히 일치하지 않는 것은 무엇입니까? 작업? 어떤 오류가 발생합니까? –

+0

오류가 발생하지 않지만 데이터베이스가 업데이트되지 않았습니다. – Shevliaskovic

+0

열 'aitisi_ID'가 숫자입니까? – Steve

답변

4

올바른 업데이트 쿼리는 두 PARAMS와 매개 변수가있는 쿼리 생성 및 초기 값으로 설정

string kat1 = "aaaaa"; 
    cmd.CommandText = "UPDATE Table2 SET [email protected] WHERE [email protected]"; 
    cmd.Parameters.AddWithValue("@kat", kat1); 
    cmd.Parameters.AddWithValue("@id", 0); 
    cn.Open(); 
    for (int i = 0; i < listBox1.Items.Count; i++) 
    { 
     cmd.Parameters["@id"].Value = Convert.ToInt32(listBox1.Items[i])); 
     cmd.ExecuteNonQuery(); 
    } 
    cn.Close(); 

이다.
invarian 값 (kat1)이있는 문자열 유형의 한 매개 변수 두 번째 매개 변수는 더미 초기 값이있는 정수 유형입니다.
그런 다음 루프에서 다양한 매개 변수 (@id) 만 업데이트됩니다.
두 번째 매개 변수의 값은 정수로 채워진 ListBox1의 Item 컬렉션 (모든 항목이 업데이트 값으로 전달됨)에서 가져온 것으로 데이터 테이블에서 예상대로 int로 변환됩니다.

+0

열 'aitisi_ID'는 'int'입니다. 이것이'int'에서도 작동합니까? – Shevliaskovic

+0

예, 원래 쿼리에서 열의 값을 작은 따옴표로 묶어 문자열로 처리합니다. 정수 유형의 매개 변수를 사용하면 값은 문자열이 아닌 정수로 전달됩니다. – Steve

+0

OH, 훌륭합니다! 많은 감사 – Shevliaskovic

0

당신은하지 않습니다 ID를 작은 따옴표로 묶어야합니다. 정수이기 때문에 SQL 서버는 aitisi_ID = ' "+ listBox1.SelectedIndex +"'에 만족하지만 ToString()을 사용해야합니다.

WHERE aitisi_ID="+listBox1.SelectedIndex.ToString()+" 
+0

가장 적절한 방법은 매개 변수화 된 쿼리를 사용하는 것입니다. –

+0

여전히 데이터베이스가 업데이트되지 않았습니다. – Shevliaskovic

0

는 또한 foreach로, 코드가 덜 일반적인 만들어보십시오 : 당신은 정수에 대한 작은 따옴표가 필요하지 않습니다

foreach(object i in listBox1.Items) 

, 단지 문자열. 오류 게시, 결과 디버그, 중단 점 넣기 및 자세한 정보 제공을 시도하십시오. 열 'aitisi_ID은'숫자 유형 인 경우

+0

오류가 발생하지 않지만 데이터베이스가 업데이트되지 않았습니다. foreach와 for의 차이점이 있습니까? – Shevliaskovic

+0

은 배열에 들어가서 액세스 할 수 있습니다. foreach에는 객체 또는 var에 추가 할 실제 요소가 있습니다. 데이터베이스를 열고 코드에서 호출하는 쿼리와 정확히 동일한 쿼리를 만든 다음 실행 해 봅니다. 어떻게 할 수 있는지보십시오. 추가 할 수 있고 추가하면 문제는 코드입니다. 문제가 없다면 문제가됩니다. 쿼리 – AAlferez

+0

의 구문과 listBox1.SetSelected를 어떻게 설정합니까? – Shevliaskovic

관련 문제