private void InitBulkInsertColumns(IDataReader data) { for (int i = 0; i < ColumnMappings.Count; i++) { BulkInsertColumnMapping mapping = ColumnMappings[i]; if (!string.IsNullOrWhiteSpace(mapping.SourceName)) { try { data.GetOrdinal(mapping.SourceName); // Throws some exception if name is invalid. _columns.Add(new MsAccessBulkInsertColumn(mapping.SourceName, mapping)); } catch (Exception ex) { ThrowExceptionInvalidSourceColumnMapping(i, null, mapping.SourceName, ex); } } else if (mapping.SourceOrdinal >= 0) { if (mapping.SourceOrdinal >= data.FieldCount) { ThrowExceptionInvalidSourceColumnMapping(i, mapping.SourceOrdinal); } _columns.Add(new MsAccessBulkInsertColumn(data.GetName(mapping.SourceOrdinal), mapping)); } else { ThrowExceptionInvalidSourceColumnMapping(i); } } }
private void InitExplicitSchemaColumns(StreamWriter schemaFile) { var schemaLoader = new MsAccessSchemaLoader(); TableSchema tableSchema = schemaLoader.LoadTableSchema(_connection, DestinationTableName); for (int columnNumber = 0; columnNumber < ColumnMappings.Count; columnNumber++) { MsAccessColumnSchema databaseColumn = null; MsAccessBulkInsertColumn bulkInsertColumn = _columns[columnNumber]; BulkInsertColumnMapping mapping = bulkInsertColumn.Mapping; if (!string.IsNullOrWhiteSpace(mapping.DestinationName)) { if (tableSchema.Columns.Contains(mapping.DestinationName)) { databaseColumn = (MsAccessColumnSchema)tableSchema.Columns[mapping.DestinationName]; } else { ThrowExceptionInvalidDestinationColumnMapping(columnNumber, null, mapping.DestinationName); } } else if (mapping.DestinationOrdinal >= 0) { if (mapping.DestinationOrdinal >= tableSchema.Columns.Count) { ThrowExceptionInvalidDestinationColumnMapping(columnNumber, mapping.DestinationOrdinal); } else { databaseColumn = (MsAccessColumnSchema)tableSchema.Columns[mapping.DestinationOrdinal]; } } else { ThrowExceptionInvalidDestinationColumnMapping(columnNumber); } bulkInsertColumn.DestinationColumnName = databaseColumn.Name; bulkInsertColumn.ColumnType = GetBulkInsertColumnType(databaseColumn); WriteSchemaColumnInfo(schemaFile, columnNumber + 1, databaseColumn); } }
public MsAccessBulkInsertColumn(string sourceColumnName, BulkInsertColumnMapping mapping) { SourceColumnName = Check.NotNullOrWhiteSpace(sourceColumnName, nameof(sourceColumnName)); Mapping = mapping; }