SqlBulkCopy from a List<>

前端 未结 4 1016
无人共我
无人共我 2020-11-27 02:53

How can I make a big insertion with SqlBulkCopy from a List<> of simple object ?

Do I implement my custom IDataReader ?

4条回答
  •  醉梦人生
    2020-11-27 03:11

    Late to the party, but if you add this EntityDataReader class from Microsoft, there's an AsDataReader() extension method that does exactly that: https://github.com/matthewschrager/Repository/blob/master/Repository.EntityFramework/EntityDataReader.cs

    (example [List].AsDataReader() implementation:)

    var connStr = "";
    using (var connection = new SqlConnection(connStr)) 
    {
        var startTime = DateTime.Now;
        connection.Open();
        var transaction = connection.BeginTransaction();
        try
        {
            //var connStr = connection.ConnectionString;
            using (var sbCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction))
            {
                sbCopy.BulkCopyTimeout = 0;
                sbCopy.BatchSize = 10000;
                sbCopy.DestinationTableName = "Foobars";
                var reader = Foobars.AsDataReader();
                sbCopy.WriteToServer(reader);
            }
            transaction.Commit();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            transaction.Rollback();
        }
        finally
        {
            transaction.Dispose();
            connection.Close();
            var endTime = DateTime.Now;
            Console.WriteLine("Upload time elapsed: {0} seconds", (endTime - startTime).TotalSeconds);
        }
    }
    

提交回复
热议问题