我想知道SQL中是否有一个参数为all(不是*!)例如我现在正在写一个搜索表,如果用户不在文本框中输入一些内容,那就意味着忽略该特定参数并显示该字段的所有参数。我知道您可以为每种情况创建单独的 OLEDB 或 SQL 命令,并且它会起作用,但我只想在一个命令中执行此操作,如果文本框为空,我会忽略它。到目前为止,这个人所说的我尝试过但没有成功...它说我有一些类型不匹配
http://timothychenallen.blogspot.com/2007/06/sql-server-all-values-parameters-in.html
这是我现在这部分的代码
da.SelectCommand = new OleDbCommand("SELECT *
FROM TestQuery
WHERE (VendorName = @VendorName)
AND CustomerName = @CustomerName", cs);
if (combo_VendorView.Text != "")
da.SelectCommand.Parameters.Add("@VendorName", OleDbType.VarChar).Value = combo_VendorView.Text.ToString();
da.SelectCommand.Parameters.Add("@CustomerName", OleDbType.VarChar).Value = combo_CustomerView.Text.ToString();
dsB.Clear();
da.Fill(dsB);
dgv_DataLookup.DataSource = dsB.Tables[0];
假设我将 txt.VendorName 留空,我基本上想忽略该参数。感谢您的帮助! :)
更新的代码
da.SelectCommand = new OleDbCommand("SELECT *
FROM TestQuery
WHERE (CustomerName = @CustomerName
OR @CustomerName IS NULL)", cs);
da.SelectCommand.Parameters.Add("@CustomerName", OleDbType.VarChar).Value = combo_CustomerView.Text.ToString();
我正在使用 ado.net Visual Studio 2010,如果这与 oledb(访问)有区别,它可以很好地使用参数进行搜索,但是当我不输入客户名称时,它只显示测试列的名称查询但没有信息...我希望它基本上就像这一列的 select *
最佳答案
在此示例中,您可以使用COALESCE
运算符。如果您的参数作为 null 传入,或者您输入了将空字符串转换为 null 的逻辑,那么您基本上可以这样做:
SELECT *
FROM TestQuery
WHERE
VendorName = COALESCE(@VendorName,VendorName)
AND CustomerName = COALESCE(@CustomerName, CustomerName)
如果 VendorName 为 NULL,它只会检查 VendorName 是否等于 VendorName,这始终为 true。
关于ALL 的 SQL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6650879/