在 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中文网其他相关文章!