使用IDataReader从SqlBulkCopy返回记录

时间:2012-12-08 03:08:44

标签: c# sql-server entity-framework sqlbulkcopy

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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