如何将“全选”值添加到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搜索。虽然如果你有更多的参数,这个很快就会上升!
一种方式做,这是使用空的参数的:
SELECT Field1, Field2, Field3
FROM Table
WHERE (@Field2 IS NULL OR Field2 = @Field2)
,但你必须知道,这可能会导致在某些情况下,那里有许多参数不正确缓存的查询计划。如果您使用的是SQL Server 2005+,则可以使用OPTIMIZE FOR将其缓解为较大的内存。
此外,请确保您的统计数据是最新的。
感谢您的链接,实际上测试它在真实的代码(我有很多参数)导致性能问题。 – 2010-02-25 10:19:47
@Enrico Castellani:确保您的统计数据是最新的。 – 2010-02-25 10:45:58
通常我会在SP中使用可空参数方法。根据你的代码,为什么不根据用户输入的内容构建SQL命令文本?例如,如果用户在文本框中输入了某些内容,则只需在SQL中添加一个where子句,否则只是简单的选择。
是的,你看我有大量的参数...我发布的代码只是一个例子。 我正在寻找一个工作原理来不建立大量的if代码。 – 2010-02-25 10:17:50