2 回答
TA贡献1806条经验 获得超8个赞
您可以在参数值中传递 SQL 代码,但 SQL 引擎不会将其视为代码 - 因此它不会运行。
这就是为什么使用参数可以保护您免受 SQL 注入的原因。
但是,这并不意味着您不能忽略参数中传递的特定值,您只需要稍微更改 SQL 代码即可:
SELECT * -- Note that best practice is to specify the columns list, not *
FROM operation
WHERE hospitalID = @hospitalID
OR @hospitalID IS NULL
请注意,我已将其更改0为null- 因为该0值可能是有效值(即使 HospitalID 以 1 开头,您也可能希望对其他某些列使用相同的技术,其中0是有效值)。
TA贡献1775条经验 获得超8个赞
我想你对使用感到困惑 AddWithValue
假设这是我的查询
string sql = "SELECT * FROM SomeTable WHERE hospitalID=@ParamValue";
要替换ParamValue,我可以这样做:
using (SqlConnection conn = new SqlConnection())
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.Add(new SqlParameter("ParamValue", someValue));
da.Fill(ds);
}
这意味着,在您的情况下,您只需传递 value 而不是 statement operation.hospitalID=filters.hospitalID。
所以代码喜欢:
string sqlParam = "SELECT * FROM SomeTable WHERE hospitalID=@ParamValue";
string sqlWithoutParam = "SELECT * FROM SomeTable";
要替换ParamValue,我可以这样做:
if(filters != null && filters.hospitalID != 0)
{
using (SqlConnection conn = new SqlConnection())
using (SqlCommand cmd = new SqlCommand(sqlParam, conn))
{
cmd.Parameters.Add(new SqlParameter("ParamValue", filters.hospitalID ));
da.Fill(ds);
}
}
else
{
using (SqlConnection conn = new SqlConnection())
using (SqlCommand cmd = new SqlCommand(sqlWithoutParam, conn))
{
da.Fill(ds);
}
}
- 2 回答
- 0 关注
- 295 浏览
添加回答
举报