【发布时间】:2023-04-05 17:33:01
【问题描述】:
我有 5 个文本框:
<TextBox Name="txbFirstName" />
<TextBox Name="txbLastName" />
<TextBox Name="txbCity" />
<TextBox Name="txbAddress" />
<TextBox Name="txbPhone" />
我想使用文本框输入生成简单的 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);
现在这工作得很好,但我想做的是,如果文本框输入为空,则使用 NULL 处理它。但据我所知,不能在查询中使用“= NULL”,而应该使用“IS NULL”,这意味着我不能写这样的东西:
if (txbCity.Text == "")
database.sqlCommand.Parameters.AddWithValue("@City", null);
else
database.sqlCommand.Parameters.AddWithValue("@City", txbCity.Text);
是否可以通过代码将“IS NULL”传递给参数?所以如果 txbCity 和 txbAddress 为空,例如:
- 名字 = 约翰
- 姓氏 = Doe
- 城市 = ""
- 地址 = ""
- 电话 = 812-393-8144
我希望我的查询如下所示:
SELECT * FROM tblCustomer WHERE FirstName = "John" AND LastName = "Doe" AND City IS NULL AND Address IS NULL AND Phone = "812-393-8144";
【问题讨论】:
-
试过DbNull?
-
首先,stop using
AddWithValue。第二——你可以通过DBNull.Value。 -
@SeM 我应该使用什么来代替 AddWithValue?我现在还在学习,而且很菜鸟。
-
@JohnDoe 例如:SqlCommand.Parameters Property 或 Dapper
-
@JohnDoe 坦率地说,我会说“让 Dapper 处理它”:) 处理 ADO.NET API 的特殊性并不能很好地利用任何人的时间;我强烈建议让 Dapper 处理几乎所有这些东西,但是......我有偏见(它是我们为 Stack Overflow 本身编写的数据访问工具)