从表中选择数据的最好方法是什么?
本文关键字:方法 是什么 选择 数据 | 更新日期: 2023-09-27 18:08:36
我在SQL Server 2008 R2中有一个数据库,表t
包含列x
,我设置了一个textBox来搜索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);
}
假设你在谈论sql层-和你的过时的技术选择,应该很少使用,即数据适配器,忽略所有已经为。net做了过去10年没有其他选择-这是一个没有问题的,因为只有一种方法可以做到这一点,即通过使用sql语句选择表的字段,并有一个过滤条件。
现在,初学者可以这样做:
"select * from t where x='" + textBox。Text + "%'";
,并确保他是开放的任何SQL注入攻击。sql注入攻击是一件非常神秘的事情,大多数人都知道,你可以在谷歌上找到详细的信息(只要输入"sql注入攻击"或寻找"bobby tables"-一个很好的漫画解释它)。
下一步是使用更好的命令,通过使用一个参数,将确保你不能得到sql注入。
主要的问题是为什么你有SQL,而不使用任何SQL生成LINQ集成框架,以确保编译器捕捉到像表重命名这样的小事。一般来说,很少有使用任何类型的数据集有意义的情况(主要是:没有提示表在编译时是什么样子的通用报表生成器)。
但最后它都以特定的形式运行到SQL,所以这个问题根本不是一个问题。"数千行"是很小的数据。非常小
如果编写select命令,则创建一个新的通用SqlTableAdapter:
var da = new SqlDataAdapter("select * from t where x='" + textBox.Text + "%'", tTableAdapter.Connection);
da.Fill(this.DS.t);
但是建议编辑SelectCommand '在您的type - dataset中添加查询,然后:
tTableAdapter.Fill(this.DS.t, textBox.Text)
或:
tTableAdapter.FillBy(this.DS.t, textBox.Text)