我有5个文本框:
<TextBox Name="txbFirstName" />
<TextBox Name="txbLastName" />
<TextBox Name="txbCity" />
<TextBox Name="txbAddress" />
<TextBox Name="txbPhone" />
Run Code Online (Sandbox Code Playgroud)
我想使用文本框输入生成简单的SELECT语句。为此,我使用参数和AddWithValue:
database.SetQuery("SELECT * FROM tblCustomer WHERE FirstName = @FirstName AND LastName = @LastName AND City = @City AND Address = @Address AND Phone = @Phone;");
database.sqlCommand.Parameters.AddWithValue("@FirstName", txbFirstName.Text);
database.sqlCommand.Parameters.AddWithValue("@LastName", txbLastName.Text);
database.sqlCommand.Parameters.AddWithValue("@City", txbCity.Text);
database.sqlCommand.Parameters.AddWithValue("@Address", txbAddress.Text);
database.sqlCommand.Parameters.AddWithValue("@Phone", txbPhone.Text);
Run Code Online (Sandbox Code Playgroud)
现在这可以正常工作,但是我想做的是如果文本框输入为空以使用NULL处理它。但据我所知,不能在查询中使用“ = NULL”,而应使用“ IS NULL”,这意味着我无法编写如下内容:
if (txbCity.Text == "")
database.sqlCommand.Parameters.AddWithValue("@City", null);
else
database.sqlCommand.Parameters.AddWithValue("@City", txbCity.Text);
Run Code Online (Sandbox Code Playgroud)
是否可以通过代码将“ IS NULL”传递给参数?因此,如果txbCity和txbAddress为空,例如:
我希望查询如下所示:
SELECT * FROM tblCustomer WHERE FirstName = "John" AND LastName = "Doe" AND City IS NULL AND Address IS NULL AND Phone = "812-393-8144";
Run Code Online (Sandbox Code Playgroud)
基本上:不。
除非您已禁用ANSI NULL语法(请不要这样做),否则您需要使用其他SQL进行测试NULL。一个常见的技巧(易于编写,但效率不高)是:
WHERE (FirstName = @FirstName OR (@FirstName IS NULL AND FirstName IS NULL))
AND (LastName = @LastName OR (@LastName IS NULL AND LastName IS NULL))
-- etc x5
Run Code Online (Sandbox Code Playgroud)
(或您要针对null执行的任何测试)-并使用类似以下内容的代码:
database.sqlCommand.Parameters.AddWithValue("@FirstName", txbFirstName.Text.DBNullIfEmpty());
database.sqlCommand.Parameters.AddWithValue("@LastName", txbLastName.Text.DBNullIfEmpty());
// etc x5
Run Code Online (Sandbox Code Playgroud)
在哪里DBNullIfEmpty看起来像:
internal static class MyExtensionMethods
{
public static object DBNullIfEmpty(this string value)
{
if(string.IsNullOrWhiteSpace(value)) return DBNull.Value;
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |