0

エラーは表示されませんが、

しかし、値はSQLサーバーに挿入されませんでした.....

EventDuration_DDL_SelectedIndexChanged() から Wizard_buttonClick() で動的に生成されたラベルとチェックボックスにアクセスするにはどうすればよいですか?

    protected void EventDuration_DDL_SelectedIndexChanged(object sender, EventArgs e)
    {
        int n = Int32.Parse(EventDuration_DDL.SelectedItem.ToString());

        for (int i = 0; i < n; i++)
        {

            Label NewLabel = new Label();
            NewLabel.ID = "Label" + i;
            var eventDate = Calendar1.SelectedDate.Date.AddDays(i);
            NewLabel.Text = eventDate.ToLongDateString();

            CheckBox newcheck = new CheckBox();
            newcheck.ID = "CheckBox" + i;
            newcheck.CheckedChanged += new EventHandler(this.CheckBox_CheckedChanged);

            this.Labeldiv.Controls.Add(new LiteralControl("<span class='h1size'>"));
            this.Labeldiv.Controls.Add(NewLabel);
            this.Labeldiv.Controls.Add(new LiteralControl("</span>"));
            this.Labeldiv.Controls.Add(new LiteralControl("<div class='make-switch pull-right' data-on='info'>"));
            this.Labeldiv.Controls.Add(newcheck);
            this.Labeldiv.Controls.Add(new LiteralControl("</div>"));
            this.Labeldiv.Controls.Add(new LiteralControl("<br/>"));
        }  
    }

    protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
    {
        con.Open();

        var label = Labeldiv.FindControl("Label1") as Label;
        var checkbox = Labeldiv.FindControl("CheckBox1") as CheckBox;
        using (SqlCommand cmd2 = new SqlCommand("insert into EventDays(EventDay,EventStatus)values(@EventDay,@EventStatus)", con))
        {
            var paramDay = cmd2.Parameters.Add("@EventDay", SqlDbType.DateTime);
            var paramStatus = cmd2.Parameters.Add("@EventStatus", SqlDbType.Int);
            if (label != null)
            {
                paramDay.Value = label;
                paramStatus.Value = checkbox.Checked ? 1 : 0;
                cmd2.ExecuteNonQuery();

            }
        }
        con.Close();
    }
4

2 に答える 2

2

ループ内でパラメーターを数回追加するため、エラーが表示されます。パラメータ名は一意である必要があります。
パラメータがループ外で作成され、値がループ内で設定されるようにコードを変更します。

using (SqlCommand cmd2 = new SqlCommand("insert into EventDays(EventDay,EventStatus)values(@EventDay,@EventStatus)", con))
{
    var paramDay = cmd2.Parameters.Add("@EventDay", SqlDbType.DateTime);
    var paramStatus = cmd2.Parameters.Add("@EventStatus", SqlDbType.Int);
    for (int i = 0; i < n; i++)
    {
        Label NewLabel = new Label();
        NewLabel.ID = "Label" + i;

        var eventDate = Calendar1.SelectedDate.Date.AddDays(i);
        NewLabel.Text = eventDate.ToLongDateString();
        NewLabel.CssClass = "h1size";

        CheckBox newcheck = new CheckBox();
        newcheck.ID = "CheckBox" + i;

        this.Labeldiv.Controls.Add(NewLabel);
        this.Checkboxdiv.Controls.Add(newcheck);
        this.Labeldiv.Controls.Add(new LiteralControl("<br/>"));

        paramDay.Value = eventDate;
        paramStatus.Value = newCheck.Checked ? 1 : 0;
        cmd2.ExecuteNonQuery();
    }
}

このサンプルでは、​​EventDate が DateTime で、EventStatus が Int であると想定しているため、データ型を調整する必要がある場合があります。コマンドを実行する回数によっては、cmd2 を実行できます。パラメータを追加した後に () を準備します。
さらに、using ステートメントは、SqlCommand オブジェクトが適切な方法で破棄されることを保証します。

于 2013-11-14T13:09:19.047 に答える
0

を動かしたらどうなるか

SqlCommand cmd2 = new SqlCommand("insert into EventDays(EventDay,EventStatus)values(@EventDay,@EventStatus)", con);

ループの中?

変化する

cmd2.Parameters.AddWithValue("@EventStatus", newcheck.Checked ?? 1:0);
于 2013-11-14T11:01:40.370 に答える