public void BatchSizeTest()
        {
            // Check if Streaming makes a difference:
            var streamingModes = new bool[] { true, false };

            // Check if Batch Sizes make a difference:
            var batchSizes = new int[] { 10000, 50000, 80000, 100000 };

            foreach (var streamingMode in streamingModes)
            {
                foreach (var batchSize in batchSizes)
                {
                    // Number Of Entities:
                    var numberOfEntities = 1000000;

                    // Bulk Options:
                    var bulkOptions = new BulkCopyOptions(batchSize, TimeSpan.FromSeconds(30), streamingMode, SqlBulkCopyOptions.Default);

                    // Build the Test Subject:
                    var bulkInsert = new SqlServerBulkInsert <TestEntity>(new TestEntityMapping(), bulkOptions);

                    // Experiment Name:
                    var experimentName = string.Format("BatchExperiment (NumberOfEntities = {0}, BatchSize = {1}, Streaming = {2})", numberOfEntities, batchSize, streamingMode);

                    // Measure and Print the Elapsed Time:
                    MeasurementUtils.MeasureElapsedTime(experimentName, () => WriteDataInTransaction(bulkInsert, GenerateEntities(numberOfEntities)));
                }
            }
        }
Exemple #2
0
        public void InsertManyItems()
        {
            IEnumerable <Item> data = GetData();

            using (var reader = new EnumerableDataReader <Item>(data, new string[] { "Id", "Name" }))
            {
                using (var bulkInsert = new SqlServerBulkInsert("connection string"))
                {
                    bulkInsert.Insert(reader);
                }
            }
        }
Exemple #3
0
 public void ThrowInvalidOperationExceptionWhenColumnDoesNotExistInDestinationTable()
 {
     using (IBulkActionDataReader reader = CreateDataSourceWithNonExistingColumn())
     {
         using (SqlServerBulkInsert bulkInsert = new SqlServerBulkInsert(ServerHelper.Connection))
         {
             bulkInsert.DestinationTableName = TableName_IgnoreCaseInColumnNames;
             Action action = () => bulkInsert.Insert(reader);
             action.ShouldThrow <InvalidOperationException>()
             .WithMessage($"*{TableName_IgnoreCaseInColumnNames}*{nameof(NonExistingColumnDataItem.NonExistingColumn)}*");
         }
     }
 }
Exemple #4
0
        public void BulkInsertDataFromDataTable()
        {
            DataTable expectedData = CreateDataTableDataSource();
            DataTable actualData   = null;

            using (SqlServerBulkInsert bulkInsert = new SqlServerBulkInsert(ServerHelper.Connection))
            {
                bulkInsert.DestinationTableName = TableName;
                bulkInsert.Insert(expectedData);
            }
            actualData = LoadData(ServerHelper.Connection, TableName);

            SqlServerBulkHelper.CompareTables(actualData, expectedData);
        }
Exemple #5
0
        public void BulkInsertDataFromIDataReaderIgnoreCaseInColumnNames()
        {
            DataTable expectedData = CreateDataTableDataSource(false);
            DataTable actualData   = null;

            using (IBulkActionDataReader reader = CreateIDataReaderDataSource(false))
            {
                using (SqlServerBulkInsert bulkInsert = new SqlServerBulkInsert(ServerHelper.Connection))
                {
                    bulkInsert.DestinationTableName = TableName_IgnoreCaseInColumnNames;
                    bulkInsert.Insert(reader);
                }
                actualData = LoadData(ServerHelper.Connection, TableName_IgnoreCaseInColumnNames);
            }

            SqlServerBulkHelper.CompareTables(actualData, expectedData);
        }
Exemple #6
0
        public void BulkInsertDataFromIDataReaderShortText()
        {
            DataTable expectedData = CreateDataTableShortText();
            DataTable actualData   = null;

            using (IBulkActionDataReader reader = CreateIDataReaderShortText())
            {
                using (SqlServerBulkInsert bulkInsert = new SqlServerBulkInsert(ServerHelper.Connection))
                {
                    bulkInsert.DestinationTableName = TableName_PrimitiveDataTypes;
                    bulkInsert.Insert(reader);
                }
                actualData = LoadData(ServerHelper.Connection, TableName_PrimitiveDataTypes);
            }

            SqlServerBulkHelper.CompareTables(actualData, expectedData);
        }
Exemple #7
0
        private void BulkInsertDataFromIBulkActionDataReaderCore()
        {
            DataTable expectedData = CreateDataTableDataSource();
            DataTable actualData   = null;

            using (IBulkActionDataReader reader = CreateIDataReaderDataSource(true))
            {
                using (SqlServerBulkInsert bulkInsert = new SqlServerBulkInsert(ServerHelper.Connection))
                {
                    bulkInsert.DestinationTableName = TableName;
                    bulkInsert.Insert(reader);
                }
                actualData = LoadData(ServerHelper.Connection, TableName);
            }

            SqlServerBulkHelper.CompareTables(actualData, expectedData);
        }
Exemple #8
0
        public async Task BulkInsertDataFromIBulkActionDataReaderAsynchronously()
        {
            DataTable expectedData = CreateDataTableDataSource();
            DataTable actualData   = null;

            using (IBulkActionDataReader reader = CreateIDataReaderDataSource(true))
            {
                using (SqlServerBulkInsert bulkInsert = new SqlServerBulkInsert(ServerHelper.Connection))
                {
                    bulkInsert.DestinationTableName = TableName;
                    await bulkInsert.InsertAsync(reader);
                }
                actualData = LoadData(ServerHelper.Connection, TableName);
            }

            SqlServerBulkHelper.CompareTables(actualData, expectedData);
        }
Exemple #9
0
        public void BulkInsertDataFromIDataReaderSynchronouslyWithoutDeadLock()
        {
            AsyncContext.Run(() =>
            {
                DataTable expectedData = CreateDataTableDataSource();
                DataTable actualData   = null;

                using (IDataReader reader = expectedData.CreateDataReader())
                {
                    using (SqlServerBulkInsert bulkInsert = new SqlServerBulkInsert(ServerHelper.Connection))
                    {
                        bulkInsert.DestinationTableName = TableName;
                        bulkInsert.Insert(reader);
                    }
                    actualData = LoadData(ServerHelper.Connection, TableName);
                }

                SqlServerBulkHelper.CompareTables(actualData, expectedData);
            });
        }
Exemple #10
0
        public void OneMillionEntitiesTest()
        {
            // Bulk Options:
            var bulkOptions = new BulkCopyOptions(70000, TimeSpan.FromSeconds(30), true, SqlBulkCopyOptions.Default);

            // Build the Test Subject:
            var subject = new SqlServerBulkInsert <TestEntity>(new TestEntityMapping(), bulkOptions);

            // Create the Table:
            CreateTable(tableDefinition);

            // One Million Entities:
            var numberOfEntities = 1000000;

            // Create the Enumerable Test Data:
            var data = GenerateEntities(numberOfEntities);

            // Save the test data as Bulk:
            subject.Write(connection, transaction, data);

            // Check if we have inserted the correct amount of rows:
            Assert.AreEqual(numberOfEntities, GetRowCount(tableDefinition));
        }
Exemple #11
0
        protected override void OnSetupInTransaction()
        {
            tableDefinition = new TableDefintion("UnitTest", "BulkInsertSample");

            subject = new SqlServerBulkInsert <TestEntity>(new TestEntityMapping());
        }