如何将“全选”值添加到C#和MS SQL中的参数化查询

问题描述:

我有以下代码:如何将“全选”值添加到C#和MS SQL中的参数化查询

正如你所看到的,我需要传递一个参数字段2,但我还需要一个参数是ablo来处理“”所有值“选项,例如,如果我将”foo“分配给参数,查询将返回每个记录Field2 =”foo“...但我也希望能够通过通配符,或有事要告诉你的是参数给所有的值作为结果。

MyDataset dataset = new MyDataset(); 
SqlConnection objConnection = new SqlConnection(_connectionstring); 
SqlDataAdapter objDataAdapter = new SqlDataAdapter(); 
objDataAdapter.SelectCommand = new SqlCommand(); 
objDataAdapter.SelectCommand.Connection = objConnection; 
objDataAdapter.SelectCommand.CommandText = 
"SELECT Field1, Field2, Field3 FROM Table WHERE (Field2 = @Field2)"; 
objDataAdapter.SelectCommand.CommandType = CommandType.Text; 
objDataAdapter.SelectCommand.Parameters.AddWithValue("@Field2", txtBoxField2.Text); 
objDataAdapter.Fill(dataset.Table); 
this.DataContext = dataset.Table.DefaultView; 

预先感谢您。

如果您在C#代码中构建SQL,那么只需在您的C#逻辑中放入一个if条件,以便在要返回所有记录的实例中不包含WHERE子句。这将创建一个不同的SQL语句,因此可以按计划执行性能/执行。

如果你打算使用一个存储过程,你可以试试这个方法:

IF (@Field2 = 'SomeWildcardValue') 
    SELECT Field1, Field2, Field3 FROM SomeTable 
ELSE 
    SELECT Field1, Field2, Field3 FROM SomeTable WHERE Field2 = @Field2 

甚至,让他们完全独立,创建一个存储过程,以全部回归,以及一个返回基于字段2搜索。虽然如果你有更多的参数,这个很快就会上升!

+0

是的,你看我有大量的参数...我发布的代码只是一个例子。 我正在寻找一个工作原理来不建立大量的if代码。 – 2010-02-25 10:17:50

一种方式做,这是使用空的参数的:

SELECT Field1, Field2, Field3 
FROM Table 
WHERE (@Field2 IS NULL OR Field2 = @Field2) 

,但你必须知道,这可能会导致在某些情况下,那里有许多参数不正确缓存的查询计划。如果您使用的是SQL Server 2005+,则可以使用OPTIMIZE FOR将其缓解为较大的内存。

此外,请确保您的统计数据是最新的。

+0

感谢您的链接,实际上测试它在真实的代码(我有很多参数)导致性能问题。 – 2010-02-25 10:19:47

+0

@Enrico Castellani:确保您的统计数据是最新的。 – 2010-02-25 10:45:58

通常我会在SP中使用可空参数方法。根据你的代码,为什么不根据用户输入的内容构建SQL命令文本?例如,如果用户在文本框中输入了某些内容,则只需在SQL中添加一个where子句,否则只是简单的选择。