我所拥有的是ListView
列表中每个项目的复选框。
单击按钮,我会像这样收集我的“已检查项目”;
ListView.CheckedListViewItemCollection checkedItems = emps.CheckedItems;
List<string> attend = new List<string>();
foreach (ListViewItem item in checkedItems)
{
attend.Add(item.Text);
}
我知道这是有效的,因为我打印了这样的内容;
string s = String.Join(",", attend); MessageBox.Show(s);
但是,我想使用这些并为列表 ( )strings
中的每个字符串运行 SQL 存储过程。attend
像这样;
SqlConnection con = new SqlConnection(conn);
con.Open();
SqlCommand cmd = new SqlCommand("my_SP", con);
cmd.CommandType = CommandType.StoredProcedure;
foreach (string item in attend)
{
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("@Name", item));
cmd.Parameters.Add(new SqlParameter("@Course", attender.SelectedValue));
cmd.ExecuteReader();
}
con.Close();
当我只检查列表中的一项时,这非常有效,当我检查多个项目时它会失败。
错误信息是;
There is already an open DataReader associated with this Command which must be closed first.
我已经尝试更改命令等的变量名称,但我没有看到 aDataReader
打开的位置,我之前没有遇到过这个错误。