我在SQL Server 2008 R2中有一个数据库,表t
包含一列x
,我设置了一个textBox来搜索TextChanged事件上的x
值,一个datagridview来查看结果
我的问题是:如果表格x
包含数千行,那么搜索t
值的最佳方法是什么?
这个怎么样:
private void textBox_TextChanged(object sender, EventArgs e)
{
tTableAdapter.Adapter.SelectCommand.CommandText = "select * from t where x like '" + textBox.Text + "%'";
tTableAdapter.Fill(this.DS.t);
}
答案 0 :(得分:0)
假设您正在谈论sql层 - 并且您过时选择的技术应该很少使用,即数据加载器,忽略过去10年中为.NET所做的所有事情,我们别无选择 - 这是一个非-question因为只有一种方法可以做到这一点,即使用一个SQL语句来选择表的字段并具有过滤条件。
现在,初学者可以通过以下方式实现:
"从t中选择*,其中x ='" + textBox.Text +"%'";
并确保他对任何SQL注入攻击都是开放的。 sql注入攻击是一个非常神秘的事情,大多数人都知道,你可以在谷歌上找到关于它的详细信息(只需输入" sql注入攻击"或寻找" bobby表&#34 ; - 一个很好的漫画解释它。)
然后下一步是使用更好的命令,使用PARAMETER来确保你不能得到sql注入。
主要的问题是为什么你有SQL,并且不使用任何SQL生成LINQ集成框架,以确保编译器捕获表重命名之类的小东西。通常情况下,使用任何类型的数据集都很有意义(主要是:通用报表生成器无法理解表格在编译时的外观)。
但最后它以特定的形式运行到SQL,所以问题根本不是问题。并且"数千行"是微小的数据。就像真的很小。
答案 1 :(得分:-1)
如果编写select命令,请创建一个新的通用SqlTableAdapter:
var da = new SqlDataAdapter("select * from t where x='" + textBox.Text + "%'", tTableAdapter.Connection);
da.Fill(this.DS.t);
但在您的Typed-DataSet中重新定位到Edit SelectCommand \ Add a query,然后:
tTableAdapter.Fill(this.DS.t, textBox.Text)
或:
tTableAdapter.FillBy(this.DS.t, textBox.Text)