C# 如何显示进入foreach循环的所有结果
这是我的密码C# 如何显示进入foreach循环的所有结果,c#,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 DataTab
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时打开close connection。其次,从mssql的角度来看,像“%word%”这样的词会给您带来麻烦,因为它无法被索引。此外,如果您能够获得正确的数据,以便能够在'skill1'、'skill2'、'..'和'..'中构建where技能,则会更好,从而提高性能并减少对数据表中数据的需求
如果您仍然需要使用%WOR%,那么考虑使用TEMP表,而不是在SQL中进行查询。通常,它的执行速度应该比for-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绑定datatable:-
GridView1.DataSource = dt;
GridView1.DataBind();
每次循环迭代都会创建一个新的数据表,因此会丢失以前的内容。除此之外,您不会说您在使用此代码时遇到了什么错误,或者您已经尝试过如何显示它。这会有帮助。我还将在此处声明强制性的“您应该使用SQL参数来避免SQL注入攻击”。您可以使用数据表合并。查看此链接:-丢失以前的内容..这正是问题所在..我想显示所有结果…需要您的评论请查看更新的答案。。希望它会有帮助,但是先生,它只会显示我们在循环中得到的最后结果。我正在尝试写所有的结果。好的,我误读了要求。用普拉纳夫的答案代替。很好。如何在网格视图中显示?'System.Data.DataTable'不包含“copy”的定义@user2068501 Pranav所说的copy只是一个伪代码,如果我正在搜索关键字“java”,它会显示那些具有java技能的人。如果我的下一个关键字是“a”,它也会返回与前一个相同的结果,因此会返回多个相同的结果得到…希望你得到了我的绊脚石…给我你的宝贵意见,并建议我一些解决方案,如果你有什么比这个