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); }
/// <summary> /// Executes a long SQL command in cancelable mode. /// </summary> /// <param name="cmd"></param> /// <param name="action"></param> 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); } }
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); }