这个问题仅用于教育目的,因为我目前没有构建任何使用用户输入构建 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 查询不完整,我想知道问题是我试图做的事情根本无法完成,或者我是否忽略了某些东西。