我正在通过使用SqlBulkCopy类对我的数据库进行批量插入/更新。插入/更新数据后,我想用它做更多的逻辑。
目前,我的IDataReader有多个要插入和更新的记录。针对数据库的所有操作都能正常工作但是,在写入数据之后,IDataReader对象不再具有任何行。
是否有办法保留行,并为插入的记录添加自动生成的唯一标识符字段?
以下是我的代码中的代码段:
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;
}
提前致谢。
答案 0 :(得分:0)
经过多次研究后我得出结论认为这是不可能的。我能够想出一个解决方案。我所做的是在执行查询之前将DateTime.Now()写入变量。执行查询后,我对所有记录执行了一个select查询,其中LastUpdated时间戳字段大于插入/更新之前记录的DateTime变量。
请注意,这在我的场景中工作正常,因为此表中的数据仅由此调度程序插入/更新。如果这是一个数据来自多个地方或用户的应用程序,则需要重新考虑或调整此方法。