如何显示foreach循环中的所有结果
本文关键字:结果 循环 foreach 何显示 显示 | 更新日期: 2023-09-27 18:04:34
这是我的代码
foreach (string word in words)
{
SqlCommand cmd= new SqlCommand("select * from skills where (skills like '%"+word+"%')",con);
SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable();
da.Fill(dt);
}
最后我想显示所有的结果到gridview或一些地方(在每个循环其获得不同的结果)。我怎样才能做到这一点呢?
如果你只想在gridView c# winform中显示它,只需:
gridView1.DataSource = dt;
一个非常粗糙的架构。
编辑1:好吧,我误解了要求。扫描读取不够好。Pranav的答案已经是一个可行的解决方案了,我只会为它添加一些额外的注释。
首先,如果您在for中执行SELECT
语句,性能将变得非常糟糕。每次SELECT命中时,它都会打开关闭连接。其次,从mssql的角度来看,像'%word%'这样的地方会给你带来麻烦,因为它不能被索引。此外,如果您能够获得正确的数据,以便可以构建where skill in('skill1', 'skill2', '..', '..')
,那么将会更好,从而提高性能并减少DataTable中for的需求。
如果您仍然需要使用%word%,那么考虑使用临时表,并在sql中执行查询。通常,它应该比- SELECT执行得快。
你可以尝试这样做:-
DataTable dt = new DataTable();
foreach (string word in words)
{
SqlCommand cmd= new SqlCommand("select * from skills where (skills like '%"+word+"%')",con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt1 = new DataTable();
da.Fill(dt1);
if (dt!= null)// to check if datatable is empty:-
dt.Merge(dt1, false, MissingSchemaAction.Add);
else
dt=dt1.copy();// copy one datatable to another
dt1.clear();
}
//最后绑定gridview:-
GridView1.DataSource = dt;
GridView1.DataBind();