protected override void OnExecute() { using (var cn = OpenSourceConnection()) { using (var tn = cn.BeginTransaction(IsolationLevel.ReadUncommitted)) { using (var cmd = CreateSourceCommand(cn, tn)) { var guid = Guid.NewGuid(); var ccmd = new CancelableDbCommand(cmd); RegisterCancelable(guid, ccmd); ccmd.ExecuteReader(dr => { destination.WriteFromDataReader(dr); }); UnregisterCancelable(guid); } tn.Commit(); } } }
protected override void OnExecute() { if ((Destination.Operation & DestinationTableOperation.Drop) != 0) { DropDestinationTable(); } using (var cn = OpenSourceConnection()) { using (var tn = cn.BeginTransaction(IsolationLevel.ReadUncommitted)) { using (var cmd = CreateSourceCommand(cn, tn)) { var guid = Guid.NewGuid(); var ccmd = new CancelableDbCommand(cmd); RegisterCancelable(guid, ccmd); ccmd.ExecuteReader(dr => { // *** TODO: implement other options if ((Destination.Operation & DestinationTableOperation.Append) != 0) { // TODO: compare schema } else if ((Destination.Operation & DestinationTableOperation.Create) != 0) { CreateDestinationTable(dr.GetSchemaTable()); } else { throw new NotImplementedException(); } ExecuteBulkCopy(dr); }); UnregisterCancelable(guid); } tn.Commit(); } } }
protected void ImportTable(IDbCommand cmd, DestinationTable destination) { var guid = Guid.NewGuid(); var ccmd = new CancelableDbCommand(cmd); RegisterCancelable(guid, ccmd); ccmd.ExecuteReader(dr => { // TODO: Add multiple results logic // TODO: Add table naming logic here, maybe... var table = destination.GetTable(); table.Initialize(dr.GetSchemaTable(), destination.Options); ExecuteBulkCopy(dr, table); }); UnregisterCancelable(guid); }
private void WriteTable(IDbCommand cmd, DataFileBase destination) { // Wrap command into a cancellable task var guid = Guid.NewGuid(); var ccmd = new CancelableDbCommand(cmd); RegisterCancelable(guid, ccmd); // Pass data reader to the file formatter ccmd.ExecuteReader(dr => { destination.WriteFromDataReader(dr); }); UnregisterCancelable(guid); }
protected void ExecuteLongCommandReader(SqlCommand cmd, Action<IDataReader> action) { var guid = Guid.NewGuid(); var ccmd = new CancelableDbCommand(cmd); RegisterCancelable(guid, ccmd); try { ccmd.ExecuteReader(action); } finally { UnregisterCancelable(guid); } }