1
Dim elem As String
elem = "Grade School"
Dim v As Integer
v = 0
Dim con As New SqlConnection("SERVER=ANINGDZTS-PC;DATABASE=AEVS;Trusted_Connection = yes;")
Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM tbl_Voter WHERE Department, VotersID  = '" & elem & "''" & txt_PwordElem.Text & "'AND Voted ='" & v & "'", con)

con.Open()
Dim sdr As SqlDataReader = cmd.ExecuteReader()

Try
    If (sdr.Read() = False) Then
        high()
    Else
        MessageBox.Show("WELCOME!")
        elemBallot.Show()
        Me.Hide()
    End If
Catch EX As Exception
    MsgBox(EX.Message)
End Try

End Sub

このコードは機能していません。エラーが表示されます。

4

1 に答える 1

0

エラーが発生しやすい文字列を連結して SQL クエリを作成しようとする代わりに、パラメーター化されたクエリを使用する方がはるかに優れた方法です。SqlCommand 宣言を次のように変更します

Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM tbl_Voter WHERE Department = @Department AND VotersID = @VotersID AND Voted = @Voted", con)

cmd.Parameters.AddWithValue("@Department", elem)
cmd.Parameters.AddWithValue("@VotersID", txt_PwordElem.Text)
cmd.Parameters.AddWithValue("@Voted", v)

おまけ: SQL インジェクションを避ける

PS 使用後は、Reader と Connection を閉じることを忘れないでください。

PPSテーブル「tbl_Voter」の特定の行が存在するかどうかをパラメーターに基づいて確認する必要がある場合(つまり、コードで判断すると、DataReaderを使用するのはやり過ぎです。クエリのようなものとExecuteScalarSELECT 1 FROM tbl_Voter ...の使用を検討して、Nothing の戻り値を確認します

于 2013-09-03T02:40:38.950 に答える