2013-07-19 2 views
0

안녕하세요 친구 저는 cena1, cena2, cena3 열이 있는데이 값을 콤보 박스에 표시해야합니다. 그럴 수있는 방법이 있습니까? 나는 이것을 시도했다 :SqlCommand 여러 열의 ComboBox에 값을 채우는 중

spojeni.Open(); 
var cb4 = new SqlCommand("SELECT cena1,cena2,cena3 FROM zajezd WHERE akce="+zakce.Text,spojeni); 

      SqlDataReader dr4 = cb4.ExecuteReader(); 
      while (dr4.Read()) 
      { 
       comboBox4.Items.Add(dr4["cena1,cena2,cena3"]); 


      } 
      dr4.Close(); 
      dr4.Dispose(); 

그러나 프로그램은 떨어진다. 도와 주시겠습니까?

  spojeni.Close(); 
+0

SQL 인젝션 취약점이 있습니다. – SLaks

+1

** 어떻게 실패합니까? 오류가 있습니까? – SLaks

답변

1
spojeni.Open(); 
var cb4 = new SqlCommand("SELECT cena1,cena2,cena3 FROM zajezd WHERE akce="+zakce.Text,spojeni); 

     SqlDataReader dr4 = cb4.ExecuteReader(); 
     while (dr4.Read()) 
     { 
      comboBox4.Items.Add(dr4["cena1"].ToString() + dr4["cena2"].ToString() + dr4["cena3"].ToString()); 


     } 
     dr4.Close(); 
     dr4.Dispose(); 
1

피벗을 사용하여 이러한 열 값을 행으로 변경해야합니다. 여기에 피벗 절을 사용하는 tutorial이 있습니다. 또는 유니온을 사용할 수있는 단 하나의 열은 3 개입니다. 하지만 피벗을 사용하는 것이 좋습니다.

예 :

select cena 
    from (
    select akce, cena1 cena from zajezd 
    union all 
    select akce, cena2 cena from zajezd 
    union all 
    select akce, cena3 cena from zajezd 
) t 
    where 
    t.akce = 

그리고 C#에서 당신은시나가 같은 열 이름을 지정할 수 있습니다

예 :

comboBox4.Items.Add(dr4["cena"]); 
1

이 열 값을 retreive 유효한 방법이 아닌

dr4["cena1,cena2,cena3"] 

이와 같이 사용하는 올바른 방법

string val1 = Convert.ToString(dr4["cena1"]); 
string val2 = Convert.ToString(dr["cena2"]); 
string val3 = Convert.ToString(dr["cena3"]); 
comboBox4.Items.Add(val1+" " +val2+" " +val3); 

그리고 SQL 주입을 피하려면 매개 변수화 된 쿼리를 사용해야합니다.

1

변경이

comboBox4.Items.Add(dr4["cena1,cena2,cena3"]); 

comboBox4.Items.Add(dr4["cena1"]); 

comboBox4.Items.Add(dr4["cena2"]); 

comboBox4.Items.Add(dr4["cena3"]); 

에 코드는 SQL 삽입에 vulnerablle입니다. this을 SQL 인젝션에 대한 내용으로 읽어 볼 수도 있지만

관련 문제