【问题标题】:What's ths best way to select data from table从表中选择数据的最佳方法是什么
【发布时间】:2014-06-15 22:14:14
【问题描述】:

我在 SQL Server 2008 R2 中有一个数据库,一个表 t 包含一个列 x,我设置了一个文本框来搜索 TextChanged 事件上的 x 值,一个 datagridview 来查看结果。

我的问题是:如果表 t 包含数千行,那么搜索 x 值的最佳方法是什么?

这个呢:

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

【问题讨论】:

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


【解决方案1】:

假设您谈论 sql 层 - 以及您对应该很少使用的技术的过时选择,即数据适配器,忽略过去 10 年来为 .NET 所做的一切,别无选择 - 这是一个非-问题,因为只有一种方法可以做到这一点,即使用 SQL 语句选择表的字段并具有过滤条件。

现在,一个完全的初学者可以这样做:

"select * from t where x='" + textBox.Text + "%'";

并确保他对任何 sql 注入攻击持开放态度。大多数人都知道 sql 注入攻击是一件非常神秘的事情,您可以在 google 上找到有关它的详细信息(只需输入“sql injection attack”或查找“bobby tables”——一个很好的漫画解释它)。

下一步是使用更好的命令,通过使用 PARAMETER 确保您无法获得 sql 注入。

主要问题是您为什么要使用 SQL,并且不使用任何生成 SQL 的 LINQ 集成框架,以确保编译器能够捕获诸如表重命名之类的小问题。一般来说,使用任何类型的数据集都有意义的情况很少(主要是:通用报告生成器,在编译时不知道表格的外观)。

但最后一切都归结为特定形式的 SQL,所以问题根本不是问题。而“数千行”是微小的数据。真的很小。

【讨论】:

  • 感谢您的回答,但我只是将上面的表格描述设置为示例,但是如果表格包含nText类型的字段怎么办?
【解决方案2】:

如果你编写你的选择命令,创建一个新的通用 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多