这是我的代码
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或某些位置(在每个循环中,它会得到不同的结果)。我怎样才能做到这一点?
答案 0 :(得分:2)
如果您只想在gridView C#winform中显示它,只需执行:
gridView1.DataSource = dt;
虽然是一个非常粗糙的架构。
编辑1:
好的,我误解了这个要求。扫描读取不够好。 Pranav的答案已经是一个有效的解决方案,我将为它添加一些额外的注释。
首先,如果您正在执行SELECT
语句,性能将变得非常糟糕。每次SELECT命中它都会打开 - 关闭连接。其次,从mssql的角度来看,像'%word%'这样的地方会让你麻烦,因为它无法编入索引。此外,如果您能够获得正确的数据以便构建where skill in('skill1', 'skill2', '..', '..')
会更好,从而提高性能并减少对DataTable的需求。
如果你仍然需要使用%word%,那么考虑使用临时表,而不是在sql中进行查询。通常情况下,它应该比执行选择更快。
答案 1 :(得分:1)
您可以尝试以下方式: -
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();