如何显示进入foreach循环的所有结果

时间:2013-03-19 09:47:22

标签: c#

这是我的代码

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或某些位置(在每个循环中,它会得到不同的结果)。我怎样才能做到这一点?

2 个答案:

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