私は現在、ユーザー入力で 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");
2 番目のコードを実行すると、SQL クエリが不完全であるという例外が発生し続けます。問題は、実行しようとしていることが単純に実行できないことなのか、それとも何かを見落としているのか疑問に思っていました。