使用 IDataReader 从 SqlBulkCopy 返回记录
Posted
技术标签:
【中文标题】使用 IDataReader 从 SqlBulkCopy 返回记录【英文标题】:Return Records From SqlBulkCopy using IDataReader 【发布时间】:2012-12-08 03:08:43 【问题描述】:我正在使用 SqlBulkCopy 类对我的数据库进行批量插入/更新。数据插入/更新后,我想用它做更多的逻辑。
目前,我的 IDataReader 混合了要插入和更新的记录。针对数据库的所有操作都正常工作。但是,数据写入后,IDataReader 对象不再有任何行。
有没有办法保留行,并为插入的记录自动生成唯一标识符字段?
这是我的代码中的一个 sn-p:
public IDataReader DoBulkCopy<T>(List<T> DataToInsert, string DestinationTableName)
var BulkCopy = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString, SqlBulkCopyOptions.KeepNulls);
BulkCopy.BulkCopyTimeout = 0;
BulkCopy.BatchSize = 50;
BulkCopy.DestinationTableName = DestinationTableName;
IDataReader reader = DataToInsert.AsDataReader();
BulkCopy.WriteToServer(reader);
BulkCopy.Close();
return reader;
提前致谢。
【问题讨论】:
【参考方案1】:经过大量研究,我得出结论,这是不可能的。我能够想出一个解决方法。我所做的是在执行查询之前将 DateTime.Now() 写入变量。执行查询后,我对 LastUpdated 时间戳字段大于插入/更新之前记录的 DateTime 变量的所有记录进行了选择查询。
请注意,这在我的场景中运行良好,因为此表中的数据仅由此调度程序插入/更新。如果这是一个数据可以来自多个地方或用户的应用程序,则需要重新考虑或调整这种方法。
【讨论】:
以上是关于使用 IDataReader 从 SqlBulkCopy 返回记录的主要内容,如果未能解决你的问题,请参考以下文章
引发了“System.OutOfMemoryException”类型的异常。 C# 使用 IDataReader 时