Class ImportConfig
- Namespace
- YndigoBlue.Velocity.Model
- Assembly
- YndigoBlue.Velocity.dll
Configuration for importing CSV data into database tables.
public class ImportConfig
- Inheritance
-
ImportConfig
Examples
Basic import with auto-generated mappings:
using (Manager manager = new Manager(connection))
{
manager.LoadSchema("my_schema");
Schema schema = manager.GetSchema("my_schema");
Table usersTable = schema["users"];
// Create import config with automatic column mappings
ImportConfig config = new ImportConfig(usersTable);
// Import CSV file
string csvFilePath = @"C:\data\users.csv";
int rowsImported = manager.Import(config, usersTable, csvFilePath);
Console.WriteLine($"Imported {rowsImported} rows");
}
// CSV file format (users.csv):
// id,username,email,created_at
// 1,john_doe,john@example.com,2025-01-07 10:30:00
// 2,jane_smith,jane@example.com,2025-01-07 11:45:00
Custom CSV format with manual mappings:
// Create config for tab-delimited file
ImportConfig config = new ImportConfig(DateFormatType.Iso);
config.FieldDelimiter = '\t'; // Tab-separated
config.QuoteCharacter = '\''; // Single quotes
config.UseColumnHeaders = true;
// Manually map CSV columns to database columns
config.Mappings.AddMapping("ID", "user_id", DataType.Integer);
config.Mappings.AddMapping("Username", "username", DataType.VarChar);
config.Mappings.AddMapping("Email Address", "email", DataType.VarChar);
config.Mappings.AddMapping("Registration Date", "created_at", DataType.DateTime);
int rowsImported = manager.Import(config, usersTable, csvFilePath);
Import with custom date formats:
// Configure for European date format (dd/MM/yyyy)
ImportConfig config = new ImportConfig(DateFormatType.Culture);
config.DateFormat = "dd/MM/yyyy";
config.DateTimeFormat = "dd/MM/yyyy HH:mm:ss";
config.TimestampFormat = "dd/MM/yyyy HH:mm:ss zzz";
// Auto-generate mappings
config.AutoGenerateMappings(usersTable);
int rowsImported = manager.Import(config, usersTable, @"C:\data\european_dates.csv");
// CSV file format:
// id,username,created_at
// 1,john_doe,07/01/2025 10:30:00
// 2,jane_smith,07/01/2025 11:45:00
Import with identity columns:
Table productsTable = schema["products"];
// Keep identity values from CSV (don't auto-generate)
ImportConfig config = new ImportConfig(productsTable, keepIdentity: true);
// This will import the exact ID values from the CSV
int rowsImported = manager.Import(config, productsTable, @"C:\data\products.csv");
// CSV file:
// id,name,price
// 100,Widget,9.99
// 101,Gadget,19.99
// (IDs 100, 101 will be inserted as-is)
Selective column mapping:
// Start with auto-generated mappings
ImportConfig config = new ImportConfig(ordersTable);
// Remove columns we don't want to import
config.Mappings.RemoveMapping("internal_notes");
config.Mappings.RemoveMapping("temp_field");
// Add a custom mapping for a renamed column
config.Mappings.AddMapping("Order ID", "order_id", DataType.Integer);
int rowsImported = manager.Import(config, ordersTable, csvFilePath);
Handling CSV without headers:
ImportConfig config = new ImportConfig(DateFormatType.Iso);
config.UseColumnHeaders = false; // No header row in CSV
// Manually define column mappings in order
config.Mappings.AddMapping("Column1", "id", DataType.Integer);
config.Mappings.AddMapping("Column2", "username", DataType.VarChar);
config.Mappings.AddMapping("Column3", "email", DataType.VarChar);
int rowsImported = manager.Import(config, usersTable, csvFilePath);
// CSV file (no headers):
// 1,john_doe,john@example.com
// 2,jane_smith,jane@example.com
Complex CSV format:
// Configure for pipe-delimited, double-quoted fields
ImportConfig config = new ImportConfig(productsTable);
config.FieldDelimiter = '|';
config.QuoteCharacter = '"';
config.EscapeCharacter = '\\';
config.LineTerminator = "\r\n"; // Windows line endings
int rowsImported = manager.Import(config, productsTable, csvFilePath);
// CSV file format:
// id|name|description
// 1|"Product A"|"Description with \"quotes\" inside"
// 2|"Product B"|"Another description"
Checking mapping configuration:
ImportConfig config = new ImportConfig(usersTable);
// Check if specific columns are mapped
bool hasUsername = config.Mappings.HeaderExists("username");
bool hasEmail = config.Mappings.ColumnExists("email");
// Get mapping details
string dbColumn = config.Mappings.GetColumn("username");
Type columnType = config.Mappings.GetColumnType("username");
DataType dataType = config.Mappings.GetDataType("username");
// List all mappings
foreach (string header in config.Mappings.Headers)
{
string column = config.Mappings.GetColumn(header);
DataType type = config.Mappings.GetDataType(header);
Console.WriteLine($"{header} => {column} ({type})");
}
Remarks
ImportConfig controls how CSV files are parsed and mapped to database columns when using Engine.Manager.Import(ImportConfig, Table, string). It handles:
- CSV format settings (delimiters, quote characters, line terminators)
- Date/time format parsing
- Column mapping between CSV headers and database columns
- Type conversions from string to database types
- Identity column handling
ImportConfig provides two initialization modes:
- ISO Format (default): Uses standard ISO date formats and comma delimiters
- Culture Format: Uses current culture's date formats and list separators
Column mappings define how CSV columns (identified by header name) map to database columns. Mappings can be auto-generated from a Table or manually configured for custom scenarios.
Constructors
- ImportConfig(Table)
Creates an Import Config and auto generates column mappings from the passed in Table
- ImportConfig(Table, bool)
Creates an Import Config and auto generates column mappings from the passed in Table
- ImportConfig(Table, DateFormatType, bool)
Creates an Import Config and auto generates column mappings from the passed in Table
Properties
Methods
- AutoGenerateMappings(Table)
This will auto generate mappings based on all non-autogenerate columns