0
Dim tbl as String = Request.QueryString("tb") 'tb value = User
Dim sql As String = "Select * From @table Where @Col = @ColVal"
Dim para As New SqlParameter
para.ParameterName = "table"
para.Value = tbl

Dim paraArray1 As New SqlParameter
paraArray1.ParameterName = "@Col"
paraArray1.Value = "Name"

Dim paraArray2 As New SqlParameter
paraArray2.ParameterName = "@ColVal"
paraArray2.Value = "Stephen"

DbDataAdapter を使用して「sql」コマンドを実行しようとすると、このエラーが発生しました

テーブル変数「@table」を宣言する必要があります。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Data.SqlClient.SqlException: テーブル変数 "@table" を宣言する必要があります。

指定されたテーブル名をパラメーターとして使用してSQLを実行し、SQLインジェクションを回避するにはどうすればよいかアドバイスしてください。どうもありがとう!

4

3 に答える 3

2

パラメータはストアド プロシージャに関連しているため、インライン クエリでは指定できません。クエリでパラメーターを連結する必要があります。

SQL インジェクションを回避するには、ストアド プロシージャを使用するのが最善の方法ですが、インライン クエリを使用する必要がある場合は、インライン クエリを作成する前に値を確認してください。

于 2012-06-07T07:31:44.117 に答える
0

テーブルのパラメータ名を正しく記述してください。

para.ParameterName = "@table"

SqlParameterパラメータがステートメントに直接挿入されることはないため、何らかの方法でSQLインジェクションを回避することを使用します。

于 2012-06-07T07:05:52.403 に答える
0

パラメータは値に対してのみ有効です。SQL文字列を変更します。

Dim sql As String = String.Format("Select * From {0} Where {1} = @ColVal",tableName,ColName)
于 2012-06-07T07:06:17.960 に答える