2014-06-24 6 views
1

내 첫 번째 유용한 연습 응용 프로그램에서 일하는 사람들이 SQL을 알지 않고도 간단한 쿼리를 실행하는 데 도움이되도록 일하고있는 경우 SQl 쿼리를 실행하십시오.VB .net

4 개의 텍스트 입력란이있는 간단한 양식이 있습니다. 열, 테이블, 조건 열, 조건

나는 조건문 열이 비어있는 경우 where 문없이 쿼리를 실행하거나 무언가가있을 경우 조건문을 실행합니다. 나는 모든 필드를 기입 할 때 난 그냥 열 및 테이블 필드를 입력하려고 할 때 무슨 일이 일어나고 있는지

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles CMDQuery.Click 

    If Columntxtbox.Text <> "" Then 
     If SQL.HasConection = True Then 
      If Conditioncolumntxtbox.Text = "" Then 
       SQL.runquery("Select " & Columntxtbox.Text & " from " & tabletxtbox.Text) 
      Else 
       SQL.runquery("Select " & Columntxtbox.Text & " from " & tabletxtbox.Text & " Where " & Conditioncolumntxtbox.Text & " like'%" & conditiontxtbox.Text & "%'") 

       If SQL.sqldataset.Tables.Count > 0 Then 
        DGVData.DataSource = SQL.sqldataset.Tables(0) 
       End If 
      End If 
     End If 
    End If 

End Sub 

, 그것은 잘 작동한다 아무 일도 발생하지 않습니다. 나는 그것이 세번째와해야한다고 생각하고있다. (만약 내가 =를 <로 바꾸면 열과 도시가 채워 졌을 때와 같은 키워드로 에러가 발생한다.) 어떤 도움을 주겠다.

그러나이 떠날 아주 나쁜 관행 있음을 유의하십시오 어떤 조건

If Columntxtbox.Text <> "" Then 
    If SQL.HasConection = True Then 
     If Conditioncolumntxtbox.Text = "" Then 
      SQL.runquery("Select " & Columntxtbox.Text & " from [" & tabletxtbox.Text & "]") 
     Else 
      SQL.runquery("Select " & Columntxtbox.Text & " from [" & tabletxtbox.Text & _ 
         "] Where [" & Conditioncolumntxtbox.Text & "] like '%" & _ 
         conditiontxtbox.Text & "%'") 
     End If 
     If SQL.sqldataset.Tables.Count > 0 Then 
      DGVData.DataSource = SQL.sqldataset.Tables(0) 
     End If 
    End If 
End If 

이없는 경우

감사

+2

WHERE 절 앞에 (그리고 아마도 LIKE 연산자 뒤에) 공백이 있어야합니다. 그 말. SQL 인젝션에 대한 충돌 과정을 즉시 시작하십시오. – Steve

+0

복사 및 붙여 넣기시 뭔가가 발생 했어야합니다. 필자의 oringal 코드에 올바른 공백이 있으므로 나쁘지 포스트 – bdrilling33

+1

@ 스티브 좋은 관찰 ... 이것은 주요 SQL 주입 영토입니다. 보다 안전하려면 매개 변수화 된 쿼리를 사용해야합니다. – JiggsJedi

답변

1

누락 된 공간에서 일부는, 당신은 쿼리 결과를 표시하지 않습니다 귀하의 사용자 유형을 직접 값, 열 이름 및 기타 p 수표없이 SQL 텍스트에 추가되는 텍스트 아트. 사용자는 아무 것도 입력 할 수 있으며 sql injection에 대해 알고 있고 평생을 망칠 수있는 악의적 인 사용자를 찾을 수 있습니다.

상황과 요구 사항을 고려하면 (연습용 앱) 나는 잠시 문제를 무시할 수 있다고 생각합니다. 그러나 데이터가 고객에게 가장 중요한 것 인 실제 상황에서이 정도의 구멍을 남기지 않는 것은 실제로 전문가가 아닙니다.

+0

SQL 주입 및이를 방지하는 방법에 대해 읽어야합니다. 그동안 열/테이블 쿼리를 작동 시키려면 어떻게해야합니까? – bdrilling33

+0

열 이름에 공백이 포함되어 있습니까? ColumnTextBox에 둘 이상의 열의 이름이 포함되어 있습니까? 탭 이름과 열 이름의 예는 오류를 발견하는 데 도움이 될 수 있습니다. – Steve

+0

내 텍스트 상자에 다음을 입력합니다 : Column = * Table = Stores 조건 열 = City 조건 = t – bdrilling33