代码之家  ›  专栏  ›  技术社区  ›  BoJack Horseman

DataTable似乎丢失了数据

  •  1
  • BoJack Horseman  · 技术社区  · 8 年前

    当我想向datatable中添加列时,是否过度编写了datatable?我知道,如果我在FinishButton()事件中写入输出窗口,结果就在那里,但当我在pushdatatosql()方法中写入输出时,结果是空的。我将Datatable定义为类变量。

    我在这里错误地编码了什么?

    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);
            }
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Michael Hancock    8 年前

    这个 dtResult 您引用的类变量的持续时间仅与请求的持续时间相同。因此,对于您在页面中的每个回发帖子,都将创建该类和该类成员的新实例。在Webforms中 卸载事件在页面完全呈现、发送到客户端并准备丢弃后引发 MSDN . 此时,您的类变量及其持有的任何值都将被销毁。

    要解决此问题,可以尝试将值存储在视图状态。哪一个 persists across requests .