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

时间:2015-03-23 21:40:52

标签: c# linq datatable

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

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

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

构建DataTable

    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;

    }

刷新DataTable

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

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

2 个答案:

答案 0 :(得分:0)

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

DataTable dt = //Your table
//Here a select to the database
DataReader dr = //Your select query
dt.Load(dr)
像这样的事情。但是你知道,使用using语句关闭数据接口等等......

答案 1 :(得分:0)

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