private DataTable CreateDataTable() { var eventsTable = new DataTable(TableName); foreach (var standardColumn in ColumnOptions.Store) { var standardOpts = ColumnOptions.GetStandardColumnOptions(standardColumn); var dataColumn = standardOpts.AsDataColumn(); eventsTable.Columns.Add(dataColumn); if (standardOpts == ColumnOptions.PrimaryKey) { eventsTable.PrimaryKey = new DataColumn[] { dataColumn } } ; } if (ColumnOptions.AdditionalColumns != null) { foreach (var addCol in ColumnOptions.AdditionalColumns) { var dataColumn = addCol.AsDataColumn(); eventsTable.Columns.Add(dataColumn); if (addCol == ColumnOptions.PrimaryKey) { eventsTable.PrimaryKey = new DataColumn[] { dataColumn } } ; } } return(eventsTable); } } }
public MSSqlServerSinkTraits( string connectionString, string tableName, string schemaName, ColumnOptions columnOptions, IFormatProvider formatProvider, bool autoCreateSqlTable, ITextFormatter logEventFormatter) { if (string.IsNullOrWhiteSpace(connectionString)) { throw new ArgumentNullException(nameof(connectionString)); } if (string.IsNullOrWhiteSpace(tableName)) { throw new ArgumentNullException(nameof(tableName)); } ConnectionString = connectionString; TableName = tableName; SchemaName = schemaName; ColumnOptions = columnOptions ?? new ColumnOptions(); FormatProvider = formatProvider; StandardColumnNames = new HashSet <string>(StringComparer.OrdinalIgnoreCase); foreach (var stdCol in ColumnOptions.Store) { var col = ColumnOptions.GetStandardColumnOptions(stdCol); StandardColumnNames.Add(col.ColumnName); } AdditionalColumnNames = new HashSet <string>(StringComparer.OrdinalIgnoreCase); if (ColumnOptions.AdditionalColumns != null) { foreach (var col in ColumnOptions.AdditionalColumns) { AdditionalColumnNames.Add(col.ColumnName); } } if (ColumnOptions.Store.Contains(StandardColumn.LogEvent)) { LogEventFormatter = logEventFormatter ?? new JsonLogEventFormatter(this); } EventTable = CreateDataTable(); if (autoCreateSqlTable) { try { SqlTableCreator tableCreator = new SqlTableCreator(ConnectionString, SchemaName, TableName, EventTable, ColumnOptions); tableCreator.CreateTable(); // return code ignored, 0 = failure? } catch (Exception ex) { SelfLog.WriteLine($"Exception creating table {tableName}:\n{ex}"); } } }