SQL でのテーブル名のパラメータ化?
質問:
テーブルを渡すことは可能ですか? .NET/SQLのパラメータとして名前を使用しますか?最終的な目標は、セキュリティを損なうことなくクリーンさを強化し、乱雑なコードを回避することです。
回答:
テーブル名の直接パラメータ化はサポートされていません。ただし、sp_ExecuteSQL:
SqlConnection conn = new SqlConnection("Your database connection string"); DataTable dt = new DataTable(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "sp_ExecuteSQL"; cmd.Parameters.AddWithValue("@stmt","SELECT * FROM table"); using (SqlDataAdapter da = new SqlDataAdapter(cmd)) { da.Fill(dt); } }
を使用してこれを間接的に実現できます。あるいは、C# で (パラメータ化された) SQL ステートメントを構築し、テーブル名を追加してコマンドとして実行することもできます:
var name = ...; //Determine table name dynamically here var sql = $"SELECT * FROM {"table"}"; using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.Add("", ...); var result = cmd.ExecuteReader(); ... }
潜在的なセキュリティ脆弱性を防ぐために、必ずテーブル名をホワイトリストに登録してください。
以上がクリーンで安全なコードを実現するために、.NET/SQL でテーブル名をパラメータ化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。