-1

这是我的代码

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

            }

最后,我想将所有结果显示到网格视图或某个位置(在每个循环中它得到不同的结果)。我怎样才能做到这一点?

4

2 回答 2

2

如果您只想在 gridView C# winform 中显示它,只需执行以下操作:

gridView1.DataSource = dt;

虽然是一个非常粗糙的架构。

编辑1:

好吧,我看错了要求。扫描阅读不够好。Pranav 的答案已经是一个可行的解决方案,我将为其添加一些额外的注释。

首先,如果你SELECT在 for 中做语句,性能会变得非常糟糕。每次 SELECT 命中时,它将打开-关闭连接。其次,从 mssql 的角度来看,像 '%word%' 这样的地方会给你带来麻烦,因为它不能被索引。此外,如果您能够获得正确的数据以便您可以构建,这将更好where skill in('skill1', 'skill2', '..', '..'),从而提高性能并减少对 DataTable 的要求。

如果您仍然需要使用 %word%,则考虑使用临时表,并改为在 sql 中进行查询。通常,它应该比 for-SELECT 执行得更快。

于 2013-03-19T09:51:37.643 回答
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();
于 2013-03-19T09:56:32.757 回答