0

私がやりたいのは、Valorに割り当てられたtextbox4に入力されたテキストを探し、見つかった場合は表示することです。以下のコードは機能していますが、パラメーター化されたクエリ(セキュリティ上の理由)を使用したいので、変更方法がわかりません。それを成し遂げるための既存のコード。(例:123-A)

「123-A」を検索しますが、現在のコードで「無効な列A」というエラーが発生しました。「123-A」を検索するSQL列は「ID_LALTest」です。

Try
            ' *--------search by Unique ID-------*
            Dim CON As New SqlConnection
            Dim DA As New SqlDataAdapter
            Dim DS As New DataSet
            Dim SQL As String
            Dim Valor As String
            Valor = TextBox4_SearchData_LALTest.Text

            CON.ConnectionString = "not displayed"
            CON.Open()

            SQL = "SELECT ID_LALTest, LALTest_SeqRef_CH, LALTest_SeqRef_Year FROM LALTest WHERE ID_LALTest=@Valor"
            DA = New SqlDataAdapter(SQL, CON)
            DA.SelectCommand.Parameters.AddWithValue("@Valor", Valor)
            DA.SelectCommand.ExecuteNonQuery()
            DA.Fill(DS, 0)


            If DS.Tables(0).Rows.Count > 0 Then
                ' *--------Found, Display Data Grid-------*
                Label2_SearchData_LALTest.Visible = False
                GridView2_SearchData_LALTest.Visible = True
                GridView3_SearchData_LALTest.Visible = True
                GridView1_SearchData_LALTest.Visible = False

            Else
                Label2_SearchData_LALTest.Text = "Record Not Found"
                Label2_SearchData_LALTest.Visible = True
                GridView2_SearchData_LALTest.Visible = False
                GridView3_SearchData_LALTest.Visible = False
                GridView1_SearchData_LALTest.Visible = False

            End If
            con.dispose()
        Catch ex As Exception
            MsgBox(Err.Description)
        End Try
4

1 に答える 1

0

ええ、あなたはsql-injectionに対して広く開かれています。さまざまなデータベースによって異なります(SQLがありますが、SQL-Server、MySQL、Access / SQLデータベースなどです)。

とにかく、それはあなたが持っているものからそれほど遠くありません。VBに特化していないので、そのための擬似コードをいくつか紹介します...

クエリを変更し、入力から適用する「変数」の「プレースホルダー」を入力します...例:

"select (your fields) from (yourtable) where ID_LALTest = @parmValor"

次に、データアダプタ用に作成されたSQLコマンドにパラメータを追加します...次のようになります...

DA.SelectCommand.Parameters.Add( "@parmValor", theInputFromYourVariable );

ここで、適用する条件が複数ある場合は、「@ someParm」値を追加し続け、クエリに存在するのと同じ順序でパラメータを追加します...過去に他の人から聞いたことがありますが、クエリに一致しないパラメータの通常のシーケンスは、データ型の期待などの問題を引き起こす可能性があります。

于 2013-03-06T21:09:59.350 に答える