2013-03-19 29 views
-1

这里里面得到的是我的代码如何显示所有结果foreach循环

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

你创建新的数据表中的每个循环迭代,所以失去了以前的内容。除此之外,您不会说出使用此代码时出现了哪些错误,或者您已尝试如何显示该错误。这将有所帮助。我还会在此声明强制性的'你应该使用SQL参数来避免SQL注入攻击'。 – 2013-03-19 09:50:56

+0

你可以使用'MERGE'数据表。看到这个链接: - http://msdn.microsoft.com/en-us/library/system.data.datatable.merge.aspx – Pranav 2013-03-19 09:52:38

+0

失去了以前的内容..这是确切的问题..我想显示所有的结果...需要您的意见 – 2013-03-19 09:57:36

回答

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(); 
+0

如何在网格视图中显示? – 2013-03-19 10:01:43

+0

最后绑定与网格视图的数据表... – Pranav 2013-03-19 10:02:38

+0

'System.Data.DataTable'不包含'复制'的定义 – 2013-03-19 10:10:12

2

如果你只是想在GridView的C#的winform显示它,只是做:

gridView1.DataSource = dt; 

一个非常粗略的架构虽然。

编辑1:

好吧,我误读了要求。扫描读取不够好。 Pranav的答案已经是一个可行的解决方案,我会为它添加一些额外的注释。

首先,如果您在执行SELECT声明,效果会变得非常糟糕。每次SELECT命中时它都会打开关闭连接。其次,从mssql的角度来看,像'%word%'这样会给你带来麻烦,因为它不能被索引。此外,如果您可以获得正确的数据以便构建where skill in('skill1', 'skill2', '..', '..'),那么效果会更好,从而实现更快的性能并降低DataTable中的for的需求。

如果您仍然需要使用%word%,那么请考虑使用临时表,然后在sql中进行查询。通常,它应该比SELECT更快地执行。

+0

但先生它只会显示我们得到的最后结果在循环..我想写所有的结果.. – 2013-03-19 09:56:33

+0

好吧我误读要求。改用Pranav的答案。这很好。 – Fendy 2013-03-19 09:58:02

+0

为你+1 ..你的解决方案好得多... – Pranav 2013-03-19 10:15:29

相关问题