当我想要添加列时,我是否覆盖了数据表?我知道如果我在_FinishButton()事件中写入输出窗口,我的结果就在那里,但是当我在pushdatatos()方法中写入输出时它是空的。我将Datatable desclared作为类变量。
我在这里编码的错误是什么?
DataTable dtResult = new DataTable();
protected void FinishBtn_Click(object sender, EventArgs e)
{
pushdatatosql();
}
protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
{
DataRow dr = null;
dtResult.Columns.Add(new DataColumn("mainevent", typeof(string)));
dtResult.Columns.Add(new DataColumn("secondevent", typeof(string)));
foreach (GridViewRow gr in grdOther.Rows)
{
dr = dtResult.NewRow();
TextBox box1 = (TextBox)gr.Cells[1].FindControl("txtmainevent");
TextBox box2 = (TextBox)gr.Cells[2].FindControl("txtse");
dr["mainevent"] = box1.Text;
dr["secondevent"] = box2.Text;
dtResult.Rows.Add(dr);
}
}
protected void pushdatatosql()
{
foreach (DataRow dataRow in dtResult.Rows)
{
foreach (var item in dataRow.ItemArray)
{
System.Diagnostics.Debug.WriteLine(item);
}
}
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLString"].ConnectionString))
{
connection.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
foreach (DataColumn c in dtResult.Columns)
bulkCopy.ColumnMappings.Add(c.ColumnName, c.ColumnName);
bulkCopy.DestinationTableName = "TestInsertTable";
bulkCopy.WriteToServer(dtResult);
}
}
}
答案 0 :(得分:1)
您引用的dtResult
类变量只会持续与请求一样长。因此,对于您在页面中创建的每个回发,将创建此类的新实例,并创建该类成员。在Webforms中,“Unload事件在页面完全呈现,发送到客户端并准备好被丢弃后引发。” MSDN。此时,您的类变量及其保存的任何值都将被销毁。
要解决此问题,您可以尝试将值存储在视图状态中。哪个persists across requests。