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))); } } }
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); } } }
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)}*"); } } }
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); }
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); }
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); }
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); }
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); }
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); }); }
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)); }
protected override void OnSetupInTransaction() { tableDefinition = new TableDefintion("UnitTest", "BulkInsertSample"); subject = new SqlServerBulkInsert <TestEntity>(new TestEntityMapping()); }