0

このコードをループして、選択した CheckBoxList 項目を保存したいと思います。どうすればいいですか?

String insCmd = "Insert into Sale (Name, price) values (@Name, @price)";
SqlCommand insertUser = new SqlCommand(insCmd, myConnection);
insertUser.Parameters.AddWithValue("@Name", CheckBoxList1.SelectedItem.ToString());
insertUser.Parameters.AddWithValue("@price", Convert.ToDecimal(TextBox3.Text));

try
{
  myConnection.Open();
  insertUser.ExecuteNonQuery();
  myConnection.Close();
}
catch (Exception er)
{
  Response.Write("<script>alert('Error While Input')</script>");
}
4

3 に答える 3

4
connection.Open()
var insertUser = new SqlCommand(insCmd, connection);   

foreach(var item in CheckBoxList1.Items)
{
  if(!item.Selected) continue;
  insertUser.Parameters.Clear();
  // your code where you can use Item.Text to add parameters
  // i have no idea about your textboxes though 
  insertUser.ExecuteNonQuery();
}
connection.Close();

しかし、これは最適な方法ではありません。最適な方法には、テーブル値パラメーターとストアド プロシージャが含まれます。

于 2012-11-22T14:58:50.437 に答える
1

LINQ を使用して、選択した項目を反復処理できます。

using (var con = new SqlConnection())
{
    try
    {
        con.Open();
        const string query = "INSERT INTO Sale (Name, Price) VALUES (@Name, @Price)";
        using (var command = new SqlCommand(query, con))
        {
            foreach (var item in CheckBoxList1.Items.Cast<ListItem>().Where(item => item.Selected))
            {
                command.Parameters.Clear();
                command.Parameters.AddWithValue("@Name", item.Text);
                command.Parameters.AddWithValue("@Price", Convert.ToDecimal(TextBox3.Text));
                command.ExecuteNonQuery();
            }
        }
        con.Close();
    }
    catch (Exception)
    {
        Response.Write("<script>alert('Error While Input')</script>");
    }
}
于 2012-11-22T19:00:08.700 に答える
0
        var items = new System.Collections.ArrayList(checkedListBox1.CheckedItems);
        foreach (var item in items)
        {
            //your function for saving
        }

または、挿入機能をやり直し、選択したもののコレクションを渡し、挿入をチェックしたすべての値と連結し、クエリを 1 回実行して高速化/効率化します。

于 2012-11-22T15:24:16.677 に答える