コード例 #1
0
        public void InsertManyItems()
        {
            IEnumerable <Item> data = GetData();

            using (var reader = new EnumerableDataReader <Item>(data, new string[] { "Id", "Name" }))
            {
                using (var bulkInsert = new MsAccessBulkInsert("connection string"))
                {
                    bulkInsert.Insert(reader);
                }
            }
        }
コード例 #2
0
        private void DataTableBulkInsertCore(OleDbConnection cn)
        {
            DataTable expectedData = CreateDataTableDataSource();

            MsAccessBulkInsert bulkInsert = new MsAccessBulkInsert(cn);

            bulkInsert.DestinationTableName = TableName;
            bulkInsert.Insert(expectedData);

            DataTable actualData = LoadData(cn);

            MsAccessBulkHelper.CompareTables(actualData, expectedData);
        }
コード例 #3
0
        private void IBulkActionDataReaderBulkInsertCore(OleDbConnection cn)
        {
            DataTable expectedData = CreateDataTableDataSource();
            DataTable actualData   = null;

            using (IBulkActionDataReader reader = CreateIDataReaderDataSource())
            {
                MsAccessBulkInsert bulkInsert = new MsAccessBulkInsert(cn);
                bulkInsert.DestinationTableName = TableName;
                bulkInsert.Insert(reader);
                actualData = LoadData(cn);
            }

            MsAccessBulkHelper.CompareTables(actualData, expectedData);
        }
コード例 #4
0
        public async Task BulkInsertDataFromDataTableIntoMdbAsynchronously()
        {
            Helpers.SkipTestIfJetProviderNotAvailable();
            using (var helper = CreateHelper(ProviderType.Jet, MdbFileName))
            {
                DataTable expectedData = CreateDataTableDataSource();

                MsAccessBulkInsert bulkInsert = new MsAccessBulkInsert(helper.Connection);
                bulkInsert.DestinationTableName = TableName;
                await bulkInsert.InsertAsync(expectedData);

                DataTable actualData = LoadData(helper.Connection);

                MsAccessBulkHelper.CompareTables(actualData, expectedData);
            }
        }
コード例 #5
0
        private void BulkInsertDataFromDataTableWithExplicitColumnMappings(
            OleDbConnection cn,
            string tableName,
            Action <MsAccessBulkInsert> mappingAction)
        {
            DataTable sourceData = CreateDataTableDataSource();

            sourceData.Columns["Id"].ColumnName      = "SourceId";
            sourceData.Columns["ColNote"].ColumnName = "SourceColNote";

            MsAccessBulkInsert bulkInsert = new MsAccessBulkInsert(cn);

            bulkInsert.DestinationTableName = tableName;

            mappingAction(bulkInsert);
            bulkInsert.Insert(sourceData);

            DataTable expectedData = CreateDataTableDataSource(false);
            DataTable actualData   = LoadData(cn, tableName);

            MsAccessBulkHelper.CompareTables(actualData, expectedData);
        }
コード例 #6
0
        public void BulkInsertDataFromIDataReaderIntoMdbSynchronouslyWithoutDeadLock()
        {
            Helpers.SkipTestIfJetProviderNotAvailable();

            AsyncContext.Run(() =>
            {
                using (var helper = CreateHelper(ProviderType.Jet, MdbFileName))
                {
                    DataTable expectedData = CreateDataTableDataSource();
                    DataTable actualData   = null;

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

                    MsAccessBulkHelper.CompareTables(actualData, expectedData);
                }
            });
        }
コード例 #7
0
        private void TestDestinationColumnMappings(OleDbConnection cn)
        {
            DataTable dataSource = CreateDataTableDataSource();

            using (MsAccessBulkInsert bulkInsert = new MsAccessBulkInsert(cn))
            {
                bulkInsert.DestinationTableName = TableName;
                Action action = () => bulkInsert.Insert(dataSource);

                bulkInsert.ColumnMappings.Add("Id", "Id");
                bulkInsert.ColumnMappings.Add("ColNote", 123);
                action.Should().Throw <InvalidOperationException>($"Mapping's DestinationOrdinal is invalid.")
                .WithMessage($"*1*{TableName}*123*");

                bulkInsert.ColumnMappings.Clear();
                bulkInsert.ColumnMappings.Add("Id", "Id");
                bulkInsert.ColumnMappings.Add("ColNote", "ColNote");
                bulkInsert.ColumnMappings.Add(2, "InvalidColumnName");
                action.Should().Throw <InvalidOperationException>($"Mapping's DestinationName is invalid.")
                .WithMessage($"*2*{TableName}*InvalidColumnName*");

                bulkInsert.ColumnMappings.Clear();
                bulkInsert.ColumnMappings.Add("Id", null);
                action.Should().Throw <InvalidOperationException>($"Mapping's DestinationName is null.")
                .WithMessage("*0*");

                bulkInsert.ColumnMappings.Clear();
                bulkInsert.ColumnMappings.Add("Id", string.Empty);
                action.Should().Throw <InvalidOperationException>($"Mapping's DestinationName is empty string.")
                .WithMessage("*0*");

                bulkInsert.ColumnMappings.Clear();
                bulkInsert.ColumnMappings.Add("Id", " \t \r\n");
                action.Should().Throw <InvalidOperationException>($"Mapping's DestinationName is whitespace string.")
                .WithMessage("*0*");
            }
        }
コード例 #8
0
        public void ThrowInvalidOperationExceptionWhenSourceColumnMappingIsInvalid()
        {
            using (var connection = new OleDbConnection())
                using (var bulkInsert = new MsAccessBulkInsert(connection))
                {
                    DataTable dataSource = CreateDataTableDataSource();
                    Action    action     = () => bulkInsert.Insert(dataSource);

                    bulkInsert.ColumnMappings.Add("Id", "Id");
                    bulkInsert.ColumnMappings.Add(123, "DestinationName");
                    action.Should().Throw <InvalidOperationException>($"Mapping's SourceOrdinal is invalid.")
                    .WithMessage("*1*123*");

                    bulkInsert.ColumnMappings.Clear();
                    bulkInsert.ColumnMappings.Add("Id", "Id");
                    bulkInsert.ColumnMappings.Add("ColNote", "ColNote");
                    bulkInsert.ColumnMappings.Add("InvalidColumnName", 2);
                    action.Should().Throw <InvalidOperationException>($"Mapping's SourceName is invalid.")
                    .WithMessage("*2*InvalidColumnName*");

                    bulkInsert.ColumnMappings.Clear();
                    bulkInsert.ColumnMappings.Add(null, "Id");
                    action.Should().Throw <InvalidOperationException>($"Mapping's SourceName is null.")
                    .WithMessage("*0*");

                    bulkInsert.ColumnMappings.Clear();
                    bulkInsert.ColumnMappings.Add(string.Empty, "Id");
                    action.Should().Throw <InvalidOperationException>($"Mapping's SourceName is empty string.")
                    .WithMessage("*0*");

                    bulkInsert.ColumnMappings.Clear();
                    bulkInsert.ColumnMappings.Add(" \t \r\n", "Id");
                    action.Should().Throw <InvalidOperationException>($"Mapping's SourceName is whitespace string.")
                    .WithMessage("*0*");
                }
        }