使用IDataReader从SqlBulkCopy返回记录

c# entity-framework sqlbulkcopy sql-server

我正在通过使用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;
    }

提前致谢。

一般承认的答案

经过大量研究后我得出结论认为这是不可能的。我能够想出一个解决方案。我所做的是在执行查询之前将DateTime.Now()写入变量。执行查询后,我对所有记录执行了一个select查询,其中LastUpdated时间戳字段大于插入/更新之前记录的DateTime变量。

请注意,这在我的场景中工作正常,因为此表中的数据仅由此调度程序插入/更新。如果这是一个数据来自多个地方或用户的应用程序,则需要重新考虑或调整此方法。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因