2014-10-29 3 views
0

Visual Studio 2005 (InfoPath 양식 사용)를 사용하고 있으며 진행하기 전에 SQL Server 2008의 테이블에 레코드가 있는지 여부를 알아야합니다.VB에서 SQL 쿼리가 무언가 반환했는지 여부를 어떻게 알 수 있습니까?

지금까지 내가 가지고 올 한 다음 위의 반환 뭔가 내가 사용자가 데이터를 업데이트 할 수 있다면 ...

Dim one_SearchSQL As String = "SELECT * FROM Employee_Info WHERE empNumber = '" & EmployeeNumber & "'" 
dataUpdatesConnection.Execute(one_SearchSQL) 

하지만 NULL 반환하는 경우 나는 그들이 원하는 확인해야 먼저 새 줄을 추가하십시오.

위의 코드가 Visual Studio에서 반환하는 내용을 어떻게 확인할 수 있습니까?

VB/InfoPath- 수집 변수를 다른 부분에 도움이되는 SQL 문으로 전달한 모든 정보를 찾았습니다. 나는 그것을 다른 방법으로하는 방법을 설명하는 것을 발견하지 못했습니다. 레코드가없는 경우

감사합니다, M

+1

이 실행() 우리가 (예를 들어 : 삽입, 업데이트 및 데이터 삭제) 데이터를 검색하지 않는 경우 방법은 상황에서 사용된다 : 또한 SELECT COUNT (*)와 ExecuteScalar는 방법의 사용을 확인합니다. 그러나 Query() 메서드는 개체 컬렉션 대신 정수 (영향을받는 행 수)를 항상 반환한다는 점만 제외하면 Query() 메서드와 매우 유사합니다. VS를 사용하는 경우 dataset/datareader를 사용하여 쿼리 결과를 검색하십시오. –

+0

이와 같은 문자열 연결을 사용하여 쿼리를 작성하지 마십시오. 그것은 당신을 미쳤어 - SQL 주입 공격에 취약합니다. –

답변

0

은 여기에 모든 레코드가 존재하는 경우 True를 반환합니다 기능과 거짓 또는 예외가 발생합니다. 또한 empNumber에 대한 매개 변수를 사용하여 주입 공격을 방지합니다.

Function DataExists(EmployeeNumber As String) As Boolean 
    Dim sqlConn As New SqlConnection 
    Try 
     Using sqlConn 
      sqlConn.ConnectionString = "your connection string" 
      sqlConn.Open() 
      Using sqlCmd As New SqlCommand 
       sqlCmd.CommandText = "SELECT Count(*) FROM Employee_Info WHERE empNumber = @EmpNbr" 
       'I am arbitrarily using 50 for the length of empNumber and assuming it is a VarChar 
       sqlCmd.Parameters.Add("@EmpNbr", SqlDbType.VarChar, 50).Value = EmployeeNumber 
       Return sqlCmd.ExecuteScalar() > 0 
      End Using 
     End Using 

    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
     Return False 
    Finally 
     sqlConn.Close() 
    End Try 

End Function 
관련 문제