私が持っているのは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();
これは、リスト内の 1 つの項目のみをチェックすると完全に機能し、複数の項目をチェックすると失敗します。
エラーメッセージは次のとおりです。
There is already an open DataReader associated with this Command which must be closed first.
コマンドなどの変数名を変更しようとしましたが、どこで a が開いているのかわかりませんDataReader
。以前にこのエラーに遭遇したことはありません。