2013-03-22 4 views
0

저는 개인 영화 데이터베이스를 쿼리하는 프로그램을 만들고 있습니다. 계획의 주름이 장르를 선택합니다. 예를 들어 Action, Adventure 및 Comedy의 확인란이 3 개 있다고 가정 해 봅시다. 영화는 한 장르 또는 여러 장르로 분류 될 수 있습니다. 영화는 액션 또는 액션/코미디 일 수 있습니다.체크 박스를 기반으로 한 쿼리

아래의 코드 스 니펫은 내가 시작한 것입니다. 그러나 모든 변형을 수용하지는 않습니다. Fill_Grid 함수는 dataGridView를 채 웁니다. 영화에 장르가 하나 있거나 사용자가 영화에있는 장르와 정확히 동일한 장르를 선택한 경우 작동합니다. 영화가 액션 코미디 인 경우 사용자가 액션 만 선택하거나 코미디 또는 액션 및 코메디 만 선택하면 표시되어야하는 상황이 발생합니다.

이것이 의미가 없으면 질문하십시오. 사전에

감사합니다, 체크 박스가 처음 확인 된 경우 -J

 string str_SQL = "SELECT Name, File, Action, Fantasy, Horror, Thriller, Adventure, Animation, Comedy, Crime, Documentary, Drama, Family, Games, Mystery, Romance, SciFi, War FROM tbl_Main WHERE Action = " + chk_Action.Checked + 
      " AND Fantasy = " + chk_Adv.Checked + 
      " AND Horror = " + chk_Hor.Checked + 
      " AND Thriller = " + chk_Thrill.Checked + 
      " AND Adventure = " + chk_Adv.Checked + 
      " AND Animation = " + chk_Anim.Checked + 
      " AND Comedy = " + chk_Com.Checked + 
      " AND Crime = " + chk_Crime.Checked + 
      " AND Documentary = " + chk_Doc.Checked + 
      " AND Drama = " + chk_Drama.Checked + 
      " AND Family = " + chk_Fam.Checked + 
      " AND Games = " + chk_Game.Checked + 
      " AND Mystery = " + chk_Mys.Checked + 
      " AND Romance = " + chk_Rom.Checked + 
      " AND SciFi = " + chk_Sci.Checked + 
      " AND War = " + chk_War.Checked + ";"; 

      Fill_Grid(str_SQL); 
+3

[_parameterized queries_] (http://www.codinghorror.com/blog/2005/04/give-me- parameterized-sql-or-give-me-death.html) 이러한 종류의 코드는 [_SQL Injection_] (http://en.wikipedia.org/wiki/SQL_injection) 공격에 공개됩니다. –

+0

@Tom - 액션 코미디가 있고 액션과 로맨스를 확인했기 때문에 여전히 반환됩니다. – LittleBobbyTables

+2

저는 SQL 주입의 위험에 대해 신참자들에게 처음으로 지적합니다. 그러나이 경우 어떻게 될지 알 수 없습니다. – Steve

답변

0

다음 코드 스 니펫이 작동합니다. 귀하의 의견을 모두 주셔서 감사합니다, 당신은 내게 올바른 방향으로 가고있어

string str_Checkboxes=""; 
string str_SQL = "SELECT Name, File, Action, Fantasy, Horror, Thriller, Adventure, Animation, Comedy, Crime, Documentary, Drama, Family, Games, Mystery, Romance, SciFi, War FROM tbl_Main WHERE "; 

//Loop through each control on the form, we are looking for checkboxes 
foreach (Control c in this.Controls) 
{ 
    if(c is CheckBox) 
    { 
     if (((CheckBox)c).Checked) 
     { 
     //Bypass putting AND at the beginning of str_Checkboxes 
     if(str_Checkboxes != "") 
      str_Checkboxes+=" AND "; 
     //Checkbox text is the same as the field name in the database 
      str_Checkboxes += (((CheckBox)c).Text) + " = True"; 
     } 
    } 
    } 
//build the SQL 
str_SQL += str_Checkboxes + ";"; 
//Fill the grid 
Fill_Grid(str_SQL); 
2

참조. 그런 다음 쿼리에 추가하십시오. 모든 열 데이터 형식은 SQL에서 bit 경우

if (chk_Adv.Checked == true) { 
    str_SQL = str_SQL+" AND Fantasy = 1" 
} 
+0

프로그램이 독립 실행 형입니다. 모든 AND를 OR로 바꾸는 기능이 작동하지 않습니다. 선택한 데이터와 상관없이 모든 데이터를 반환합니다. 불행히도 매개 변수화 된 쿼리에 익숙하지 않습니다. – JMJ

0

이 시도 :

string str_SQL = "SELECT Name, File, Action, Fantasy, Horror, Thriller, Adventure, Animation, Comedy, Crime, Documentary, Drama, Family, Games, Mystery, Romance, SciFi, War FROM tbl_Main WHERE Action = " + chk_Action.Checked + 
" AND Fantasy = " + chk_Adv.Checked?-1 :0 + 
" AND Horror = " + chk_Hor.Checked ? -1 : 0 + 
" AND Thriller = " + chk_Thrill.Checked ? -1 : 0 + 
" AND Adventure = " + chk_Adv.Checked ? -1 : 0 + 
" AND Animation = " + chk_Anim.Checked ? -1 : 0 + 
" AND Comedy = " + chk_Com.Checked ? -1 : 0 + 
" AND Crime = " + chk_Crime.Checked ? -1 : 0 + 
" AND Documentary = " + chk_Doc.Checked ? -1 : 0 + 
" AND Drama = " + chk_Drama.Checked ? -1 : 0 + 
" AND Family = " + chk_Fam.Checked ? -1 : 0 + 
" AND Games = " + chk_Game.Checked ? -1 : 0 + 
" AND Mystery = " + chk_Mys.Checked ? -1 : 0 + 
" AND Romance = " + chk_Rom.Checked ? -1 : 0 + 
" AND SciFi = " + chk_Sci.Checked ? -1 : 0 + 
" AND War = " + chk_War.Checked ? -1 : 0 + ";"; 

Fill_Grid(str_SQL); 

업데이트 당신은 MS 액세스에 사용하고 데이터 형식, 다음 = 진정한 -1과 거짓 Yes/No 경우 = 0, check here

+0

Access 데이터베이스에있어 플래그가 Y/N 또는 T/F이므로 유형이 부울인지 추측합니다. 위 코드는 작동하지 않았습니다. 입력 Arshad를 주셔서 감사합니다 – JMJ

+0

Access에서'-1'은 참입니다. – Brad

관련 문제