在某些情况下,开发人员可能不仅希望参数化值,还希望参数化 SQL 查询的其他部分,例如表名。虽然直接参数化表名是不可能的,但有一些间接方法可以实现这一点。
一种方法涉及利用 sp_ExecuteSQL 存储过程,它允许执行动态 SQL 语句。通过在 C# 中构建查询并将表名称连接为字符串,开发人员可以将此参数化查询发送到数据库。
或者,开发人员也可以手动构建C# 中的参数化 TSQL。这涉及到将表名与查询的其余部分连接起来并将其作为命令向下发送。将表名列入白名单对于防止恶意输入至关重要。
尽管开发人员是代码的唯一用户,但仍然需要注意的是,参数化方法并没有提供重要的信息增加安全性。最佳实践仍然是向调用用户或应用程序授予对表的特定 SELECT 权限。
使用 sp_ExecuteSQL 间接参数化表名称的示例:
string tableName = "Employee"; string sql = "SELECT * FROM " + tableName + " WHERE Id = @Id"; using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = connection.CreateCommand()) { command.CommandText = sql; command.Parameters.AddWithValue("@Id", id); SqlDataReader reader = command.ExecuteReader(); } }
In在此示例中,表名称作为命令文本中的字符串连接起来。
以上是如何使用 .NET 间接参数化 SQL Server 查询中的表名称?的详细内容。更多信息请关注PHP中文网其他相关文章!