2014-04-10 2 views
1

사용자 이름이 이미 DB에 있는지 확인하는 함수를 만들었습니다. Sql-Injection을 피하기 위해 sql-parameterd와 함께 SqlCommand을 사용하고 있습니다. 실행하려면 기존 프로젝트 전체가 빌드되어 있기 때문에 클래스 SqlAccess을 사용해야합니다.SqlCommand 매개 변수가있는 행이 없습니다.

내가 작성한 코드 ...

'Check if username already exists' 
Public Shared Function usernameExists(Username As String) As Boolean 
    Dim sqlCommand As SqlCommand = New SqlCommand("Select UserLogin From [User] where UserLogin = '@Username'") 
    Dim param As SqlParameter = New SqlParameter("Username", SqlDbType.VarChar) 
    param.Value = Username 
    sqlCommand.Parameters.Add(param) 

Try 
    SQLAccess.OpenSQLConnection(sqlCommand, SetDBConnectionData) 'SqlDBConnectionData is a function which returns a structSQlAccess' 
    Dim dsUsers As DataSet = SQLAccess.SQLQueryToDS(sqlCommand) 

    If dsUsers.Tables(0).Rows.Count > 0 Then 
     Return True 
    Else 
     Return False 
    End If 
Catch ex As Exception 
    Return True 'TODO - Error Mgs 
End Try 

End Function 

그러나이 작동하지 않습니다는 DataSet 행이 포함되어 있지 않습니다. 아무도 제대로 할 수있는 방법을 보여 주시겠습니까?

+0

예외 메시지는 무엇입니까? – RezaRahmati

+0

예외는 아닙니다. 결과는 null입니다. 나는 기존 사용자 이름을 썼다해도 어떤 사용자도 얻지 못합니다. 그것이 문제이다. –

+0

Tim Schmelter Answer – RezaRahmati

답변

2

여기로 아포스트로피에서 매개 변수를 넣어하지 마십시오으로 여기

"Select UserLogin From [User] where UserLogin = '@Username'" 

하지만을 :

"Select UserLogin From [User] where UserLogin = @Username" 

또한, 나는 SQLAccess 연결을 관리하는 사용자 정의 클래스 있다고 가정합니다. 그것은, 불쾌한 오류의 단지 소스이기 때문에 난 강력하게 ASP.NET에서 이러한 헬퍼 클래스에 대해 조언을하는 모든 더 많은 연결이 Shared 경우 :

ExecuteReader requires an open and available Connection. The connection's current state is Connecting

+1

고맙습니다. 귀하의 솔루션이 작동합니다. 당신 말이 맞아요. 아주 오래된 프로젝트입니다. 우리는 그것을 재건하는 것을 고려해야합니다. 귀하의 의견과 제안에 진심으로 감사드립니다. 그것은 매우 도움이되었습니다. –

관련 문제