什么'是从表中选择数据的最佳方式

时间:2014-06-15 12:01:26

标签: c# sql datagridview sql-server-2008-r2

我在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);
}

2 个答案:

答案 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)