2012-10-25 4 views
0

다음 코드를 실행하여 사용자가 데이터베이스 표준 항목을 탈피했는지 확인합니다. 분명히 코드가 실행되면 부울이 반환됩니다. 결과가 있으면 true 또는 false가 반환됩니다. 결과가 발견되면 해당 결과의 ID를 저장하려고합니다. 아무도 이드가 어떻게 이런 일을하는지 어떻게 알 수 있습니까?SQL 결과에서 ID 저장

코드 : 코드에 문제가 많이 있습니다

Username = txtUserName.Text 
    Password = txtPassword.Text 
    dbConnInfo = "PROVIDER=Microsoft.Jet.OLEDB.4.0; Data Source = C:\Users\Dave\Documents\techs.mdb" 
    con.ConnectionString = dbConnInfo 
    con.Open() 
    Sql = "SELECT * FROM techs WHERE userName = '" & Username & "' AND '" & Password & "'" 
    LoginCommand = New OleDb.OleDbCommand(Sql, con) 
    CheckResults = LoginCommand.ExecuteReader 
    RowsFound = CheckResults.HasRows 
    con.Close() 
    If RowsFound = True Then 

     MsgBox("Details found") 

     TechScreen.Show() 
    Else 
     MsgBox("Incorrect details") 
    End If 

답변

2

당신이 게시 니펫을. 다행히도, 나는이 문제들을 바로 잡는데 도움을 줄 수 있습니다.

결과의 ID를로드하려면 SqlCommand.ExecuteScalar()을 사용하는 것이 좋습니다. 이는 Sql에서 하나의 결과를 되 돌리는 데 최적화되어 있기 때문입니다.

코드에 무엇이 문제가 있습니까? Sql Injection 공격은 널리 열려 있으므로 아래 샘플에서와 같이 Parametrized Queries을 사용해야합니다.

Public Function AddProductCategory(_ 
    ByVal newName As String, ByVal connString As String) As Integer 
    Dim newProdID As Int32 = 0 
    Dim sql As String = _ 
    "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); " _ 
     & "SELECT CAST(scope_identity() AS int);" 

Using conn As New SqlConnection(connString) 
    Dim cmd As New SqlCommand(sql, conn) 
    cmd.Parameters.Add("@Name", SqlDbType.VarChar) 
    cmd.Parameters("@Name").Value = newName 
    Try 
     conn.Open() 
     newProdID = Convert.ToInt32(cmd.ExecuteScalar()) 
    Catch ex As Exception 
     Console.WriteLine(ex.Message) 
    End Try 
End Using 

Return newProdID 
End Function 

출처 : MSDN