此問題僅用於教育目的,因爲我目前沒有構建任何使用用戶輸入構建SQL查詢的應用程序。在ADO.NET中,SQL查詢中可以使用SQL參數的限制有哪些?
這麼說,我知道,在ADO.NET你可以做這樣的事情防止SQL注入:
OleDbCommand command = new OleDbCommand("SELECT * FROM Table WHERE Account = @2", connection);
command.Parameters.AddWithValue("@2", "ABC");
不過,假設您的應用程序的設計是這樣一種方式,用戶可以真正進入表格的名稱,你可以做以下嗎? (我不關心,如果這是一個壞主意,讓用戶能夠提供表的名字,我只是想知道,如果以下是可能的...)
OleDbCommand command = new OleDbCommand("SELECT * FROM @1 WHERE Account = @2", connection);
command.Parameters.AddWithValue("@1", "Table");
command.Parameters.AddWithValue("@2", "ABC");
我不斷收到一個異常時,我運行第二個代碼,說SQL查詢是不完整的,我想知道如果問題是我所做的事情根本無法完成,或者我忽略了某些事情。
然後,你需要動態的SQL。 http://www.sommarskog.se/dynamic_sql.html –