首页 > 解决方案 > 即使我不打算在查询中使用它,编写 dBCommand.AddParameter 是否安全?

问题描述

场景:我的查询变量是动态的,有 4 个可能的值取决于报告类型 ( _reportType)。这意味着有 4 个不同的查询,其中一些@STAFFwhere条件中没有,所以我的问题是,离开我的查询是否安全

dBCommand.AddParameter("@STAFF", staff)

为了安全起见,还是应该包括 if else 条件?

像这样

if(_reportType == 1) 
{
    dBCommand.AddParameter("@STAFF", staff);
}
else if (_reportType == 2) 
{
    //code
}
else if (_reportType == 3) 
{
    //code
}
else
{
     //Don't add dBCommand.AddParameter("@STAFF", staff);
}

addParameter("@STAFF", staff)即使我不打算在查询中使用它,离开它是否安全?

我要写的例子

dBCommand.Initialize(string.Format(query, "RetailTable"), batch);
dBCommand.AddParameter("@STAFF", staff);

但是条件@STAFF中没有查询值WHERE

标签: c#sql-server

解决方案


除了将值发送到服务器的少量开销之外,通常应该可以指定未使用的参数。例外情况是,如果您执行的 DDL 查询限制为批处理中的唯一语句(例如CREATE VIEW)。由于参数,这些将失败。


推荐阅读