예제 #1
0
        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);
        }
    }
}
예제 #2
0
        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}");
                }
            }
        }