2012-06-07 115 views
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注入。非常感謝!表正確的

回答

0

寫參數名稱..

para.ParameterName = "@table" 

使用SqlParameter避免以某種方式SQL注入的參數是不能直接插入語句.....

+0

我試過這個,但它仍然不起作用。 –

0

參數僅供值是有效的。更改SQL字符串:

Dim sql As String = String.Format("Select * From {0} Where {1} = @ColVal",tableName,ColName) 
+0

我明白了,謝謝。但是,這樣做是否也避免了sql注入? –

+1

@ user1439709 - 這是真的,但這裏沒有其他選擇(您想生成動態的sql文本)。 – adatapost

2

參數與存儲過程相關,您不能在內聯查詢中指定它們。您需要連接查詢中的參數。

要避免SQL注入,最好的方法是使用存儲過程,但如果您需要使用內聯查詢,請在進行內聯查詢之前檢查這些值。