由于使用自动增量添加到表中,如何使用更新的数据刷新 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)