2 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以在參數(shù)值中傳遞 SQL 代碼,但 SQL 引擎不會將其視為代碼 - 因此它不會運(yùn)行。
這就是為什么使用參數(shù)可以保護(hù)您免受 SQL 注入的原因。
但是,這并不意味著您不能忽略參數(shù)中傳遞的特定值,您只需要稍微更改 SQL 代碼即可:
SELECT * -- Note that best practice is to specify the columns list, not *
FROM operation
WHERE hospitalID = @hospitalID
OR @hospitalID IS NULL
請注意,我已將其更改0為null- 因?yàn)樵?值可能是有效值(即使 HospitalID 以 1 開頭,您也可能希望對其他某些列使用相同的技術(shù),其中0是有效值)。

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
我想你對使用感到困惑 AddWithValue
假設(shè)這是我的查詢
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 關(guān)注
- 337 瀏覽
添加回答
舉報(bào)