C# DataTable似乎丢失了数据
当我认为我正在向数据表添加列时,我是否过度编写了数据表?我知道,如果我在我的_FinishButton()事件中写入输出窗口,我的结果就在那里,但是当我在pushdatatosql()方法中写入输出时,它是空的。我将Datatable描述为类变量 我在这里错误地编码了什么C# DataTable似乎丢失了数据,c#,asp.net,datatable,webforms,C#,Asp.net,Datatable,Webforms,当我认为我正在向数据表添加列时,我是否过度编写了数据表?我知道,如果我在我的_FinishButton()事件中写入输出窗口,我的结果就在那里,但是当我在pushdatatosql()方法中写入输出时,它是空的。我将Datatable描述为类变量 我在这里错误地编码了什么 DataTable dtResult = new DataTable(); protected void FinishBtn_Click(object sender, EventArgs e) { pushdatat
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);
}
}
}
您引用的
dtResult
类变量仅在请求期间有效。因此,对于您在页面中进行的每一次回发,都将创建该类和该类成员的新实例。在Webforms中,“卸载事件在页面完全呈现、发送到客户端并准备丢弃后引发。”。此时,您的类变量及其所包含的任何值都将被销毁
要解决此问题,可以尝试将值存储在视图状态。因此在winforms中这是完全可以接受的,但由于这是webforms,我必须使用view state?正确,Windows窗体中的生命周期允许您在类中存储跨事件持久化的值。因为Webforms是web应用程序,所以它的工作方式不同。viewstate或会话变量是保存datatable的最佳选择吗?@BoJackHorseman您不需要使用viewstate,您可以使用会话、数据库或任何持久性机制。@Crowcoder这些也可以。有很多方法可以解决这个问题。每一个新的WebForms开发人员的到来几乎总是一个难题across@mason-你会建议我怎么做?请不要重复我之前关于不使用DataTables的陈述。我向下滚动看到您正在使用SqlBulkCopy。这是数据表的合法用途。