public SqlTransactionRepository(string dsn, ISpecificationFinder specFinder, string[] indexedSegments, string schema = "dbo", string commonSchema = "dbo", int segmentBatchSize = 1000, string sqlDateType = "date") : base(dsn, schema) { _commonDb = new DbCreation <T>(dsn, commonSchema, sqlDateType); _transactionDb = new DbCreation <T>(dsn, schema, sqlDateType); _schemaEnsured = false; _batchSize = segmentBatchSize; _segmentBatch = new SegmentBatch <T>(this); _specs = new Dictionary <string, SegmentSpecification>(); foreach (var segmentId in indexedSegments) { var spec = specFinder.FindSegmentSpec("5010", segmentId.Trim()); _specs.Add(segmentId.Trim(), spec); } }
internal virtual void ExecuteBatch(SqlTransaction tran) { if (_segmentBatch.SegmentCount > 0) { try { using (var conn = tran == null ? new SqlConnection(_dsn) : tran.Connection) { if (conn.State != System.Data.ConnectionState.Open) { conn.Open(); } using (var sbc = new SqlBulkCopy(conn)) { sbc.DestinationTableName = string.Format("[{0}].Segment", _schema); foreach (DataColumn c in _segmentBatch._segmentTable.Columns) { sbc.ColumnMappings.Add(c.ColumnName, c.ColumnName); } sbc.WriteToServer(_segmentBatch._segmentTable); foreach (var pair in _segmentBatch._parsedTables) { sbc.ColumnMappings.Clear(); sbc.DestinationTableName = string.Format("[{0}].[{1}]", _schema, pair.Key); foreach (DataColumn c in pair.Value.Columns) { sbc.ColumnMappings.Add(c.ColumnName, c.ColumnName); } sbc.WriteToServer(pair.Value); } } } _segmentBatch = new SegmentBatch <T>(this); } catch (Exception exc) { Trace.WriteLine(exc.Message); Trace.TraceInformation("Error Saving {0} segments to db starting with {1}.", _segmentBatch.SegmentCount, _segmentBatch.StartingSegment); throw; } } }