由于使用自动增量添加到表中,如何使用更新的数据刷新 C# DataTable?

Posted

技术标签:

【中文标题】由于使用自动增量添加到表中,如何使用更新的数据刷新 C# DataTable?【英文标题】:How to refresh a C# DataTable with updated data due to adding to table with autoincrement? 【发布时间】:2015-03-23 21:40:52 【问题描述】:

将数据推送到数据库后,如何用新更新的数据刷新数据表?

我有一个由数据表/sqlbulkcopy 组合填充的自动递增表。我需要在自动增量中生成的关键信息,而不是构建大量 SQL 语句来重新查询数据库,我相信必须有更好的方法来做到这一点。

解决方案必须非常快速。我正在处理需要及时处理的数十万条记录。

构建数据表

    public void SetupTable()
    
        m_Table = new DataTable("Table");
        m_Table.Columns.Add(new DataColumn("TagID", typeof(int)));
        m_Table.Columns.Add(new DataColumn("ResultID", typeof(int)));
        m_Table.Columns.Add(new DataColumn("TypeID", typeof(int)));
        m_Table.Columns.Add(new DataColumn("Name", typeof(string)));
        m_Table.Columns.Add(new DataColumn("bDel", typeof(int)));
        m_Table.Columns.Add(new DataColumn("Notes", typeof(string)));
        m_Table.Columns.Add(new DataColumn("Units", typeof(string)));
    

填充数据表

 m_Table.Rows.Add(m_Table.Rows.Count + 1, resultid, tagtypeid, SqlStr(tagname), (isDel ? "1" : "0"), "", "");

推送到数据库

    public bool AddProcessedTable()
    
        bool bSuccess = true;
        try
        
            if (sqlConn.State != ConnectionState.Open) sqlConn.Open();

            SqlBulkCopy SqlCmd = new SqlBulkCopy(sqlConn);
            SqlCmd.BulkCopyTimeout = 600;
            SqlCmd.DestinationTableName = "Table";
            SqlCmd.WriteToServer(m_Table);
        
        catch (Exception ex)
        
            bSuccess = false;
            plog.LogMsg(String.Format("General Exception during DestWarehouse.AddProcessedTable(): 0", ex.Message));
        
        return bSuccess;

    

刷新数据表

不确定在这里尝试什么。我正在研究使用 Linq 根据 DataTable 中的数据重建 SQL 语句。 我研究了从 DataTable 创建 DataTableReader,然后使用 Load 重新加载信息。但是,我在示例中没有看到任何连接信息,并且似乎不正确。

我很少在这里发帖,所以如果我需要更正这篇文章并添加更多细节,我绝对可以,但非常感谢任何帮助!谢谢。

【问题讨论】:

我认为你想要 OUTPUT 子句 [msdn.microsoft.com/en-us/library/ms177564.aspx],如 ***.com/questions/810962/getting-new-ids-after-insert 【参考方案1】:

为什么不向数据库抛出一个新的 SELECT,将结果存储在 DataReader 中,然后使用 Load,刷新 DataTable。

DataTable dt = //Your table
//Here a select to the database
DataReader dr = //Your select query
dt.Load(dr)

类似的东西。但是你知道,使用 using 语句来关闭数据读取器等...

【讨论】:

那是我最初的想法——我只是希望 .NET Framework 中的原生功能会比这更快。我正在考虑添加一个“SessionID”列,当我插入时,我会生成一个 GUID 并将其存储到列中。然后只需根据该 GUID 选择后退,然后在我完成数据库操作后删除该列。【参考方案2】:

或者只添加和id列,做好索引,然后存储最后一个id,根据最后使用的id选择id。

【讨论】:

以上是关于由于使用自动增量添加到表中,如何使用更新的数据刷新 C# DataTable?的主要内容,如果未能解决你的问题,请参考以下文章

我想将产品添加到表中,但是当我添加新产品时,它的数量和小计会使用 Javascript 刷新(默认为 1)

在 excel 中手动添加行,最后使用 C#.net 更新到表中

如何使用自动增量更新字段 CONCAT?

使用knockoutjs进行数据表数据绑定

SQL自动增长列数据变动刷新的问题

使用实体框架自动编号