我正在尝试使用ASP.NET Gridview选择具有其ID的特定人员,但只读取最后一个用户ID。假设我有ID的3,4和6,并且只有ID号6没有出现在Gridview表中,但是出现了3和4。他们
不应该出现3和4因为我正在运行sql脚本:
WHERE NOT EmployeeId = " + userID
。
foreach (int userID in userIDList)
{
string cs = ConfigurationManager.ConnectionStrings["MYDB"].ConnectionString;
using (SqlConnection con = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand("SELECT FirstName, LastName FROM Employee WHERE NOT EmployeeId = " + userID, con);
con.Open();
GridView4.DataSource = cmd.ExecuteReader();
GridView4.DataBind();
}
}
答案 0 :(得分:0)
您的查询位于循环内。在每个循环中,执行查询并将网格与查询结果绑定,以替换先前的结果 当然,你最终只得到最后一个结果。
但是你不需要任何类型的循环,只需使用IN子句,它允许你指定一个值列表来过滤你的结果。
将您的代码更改为
string cs = ConfigurationManager.ConnectionStrings["MYDB"].ConnectionString;
using (SqlConnection con = new SqlConnection(cs))
{
string inClause = string.Join(",", userIDList);
SqlCommand cmd = new SqlCommand(@"SELECT FirstName, LastName
FROM Employee WHERE EmployeeId NOT IN(" + inClause + ")", con);
con.Open();
GridView4.DataSource = cmd.ExecuteReader();
GridView4.DataBind();
}
修改强>
您似乎在string.Join
电话中遇到了某种无法解释的错误。不清楚是什么导致它,因为据我所知,你应该能够将List<int>
作为第二个参数传递给string.Join
。但是,您可以强制使用此代码
string inClause = string.Join(",", userIDList
.Select(x => x.ToString())
.ToArray()