假設我正在查詢一個表,而null可能是要查找的值之一。設置爲這樣的查詢正確的方式來處理參數化查詢中的空值?
command.CommandText = "select * from People where Saluation = @salutation";
if(salutation != null) command.Parameters.AddWithValue("@salutation", salutation);
else command.Parameters.AddWithValue("@salutation", DBNull.Value);
當稱呼爲空時不會返回任何結果。所以我傾向於這樣做,但我覺得很難看:
string whereClause;
if(!string.IsNullOrEmpty(salutation))
{
whereClause = "Salutation = @salutation";
command.Parameters.AddWithValue("@salutation", salutation);
}
else whereClause = "Salutation is null";
command.CommandText = "select * from People where " + whereClause;
是否有更正確的方法?
如果未連接外部字符串,串聯不會造成注入漏洞。 – 2011-12-20 04:26:57
非常真實,它更容易陷入壞習慣。 – 2011-12-20 08:14:06
當@salutation爲空時,原始版本返回所有行 - 它應該是(@salutation爲null,salutation爲null)。我剛發佈了一個修改,一旦通過同行評審就會接受。 – 2011-12-20 15:44:39