2013-11-14 46 views
0

這表明沒有錯誤,如何插入動態創建的標籤文本到SQL Server在asp.net C#

但值沒有插入到SQL Server中.....

我們如何可以訪問從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

這是什麼問題? –

+1

請澄清一下您的問題? – Karan

+0

與@DavidPilkington相同的評論,如果您正在執行此代碼,您是否遇到任何錯誤?, –

回答

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。 Prepare()添加參數後。
此外,using語句確保SqlCommand對象以正確的方式處理。

+0

謝謝@Markus,但我有另一個疑問................... – THOR

+0

我可以在另一個類中訪問變量paramDay,paramStatus,即Button_Click事件。 – THOR

+0

在此實現中,paramDay和paramStatus是方法級別的變量。您只能通過此方法訪問它們。從上面的代碼我想你想在EventDuration_DDL_SelectedIndexChanged和CheckBox_CheckedChanged中顯示相同的反應。爲此,您必須將代碼從EventDuration_DDL_SelectedIndexChanged移至單獨的方法,並且還包含連接和命令(現在位於CheckBox_CheckedChanged中)。你會從這兩個事件中調用方法。 – Markus

0

如果你移動

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

裏面的循環?

變化

cmd2.Parameters.AddWithValue("@EventStatus", newcheck.Checked ?? 1:0); 
+0

您可以嘗試將i值添加到param名稱的末尾,以便它是唯一的。只是提出一些想法。 –

+0

謝謝,但是「0001,01月1日,星期一」也插入到一個分離的行中,並與選定的日期一起插入到sql服務器中...... – THOR

+0

我想將複選框值作爲位(0-開,1-關)插入到sql server – THOR

相關問題