public static DatabaseDifferences Load(string fileName) { XmlSerializer xs = new XmlSerializer(typeof(DatabaseDifferences)); StreamReader xmlStreamReader = new StreamReader(fileName); XmlTextReader xmlTextReader = new XmlTextReader(xmlStreamReader); DatabaseDifferences deserialized = (DatabaseDifferences)xs.Deserialize(xmlTextReader); xmlTextReader.Close(); return(deserialized); }
/// <summary> /// Compare two databases and show the differences /// </summary> private void Compare() { string infoMessage = string.Empty; ClearDisplay(); _dbDifferences = new DatabaseDifferences (); Engine.Compare dbCompare = new Compare(); dbCompare.CompareSchemaStarted+=new DaBCoS.Engine.Compare.CompareSchemaStartedDelegate(this.dbCompare_CompareSchemaStarted); dbCompare.CompareSchemaFinished+=new DaBCoS.Engine.Compare.CompareSchemaFinishedDelegate(this.dbCompare_CompareSchemaFinished); ShowInfoMessage("Starting compare..."); ResetLists(); // Get the user differences if (_includeUsers) { _dbDifferences.UserDifferences = dbCompare.CompareSchemaObjects(_databaseLeft, _databaseRight, Difference.DatabaseObjectType.Users); ShowDifferences(lvUsers, _dbDifferences.UserDifferences); infoMessage += "Users (" + (_dbDifferences.UserDifferences.Count - _dbDifferences.UserDifferences.CountByOutcome(Difference.DifferenceOutcome.Same)).ToString() + " of " + _dbDifferences.UserDifferences.Count.ToString() + " diff)"; } // Get the constraint differences if (_includeConstraints) { _dbDifferences.ConstraintDifferences = dbCompare.CompareSchemaObjects(_databaseLeft, _databaseRight, Difference.DatabaseObjectType.Constraint); ShowDifferences(lvConstraints, _dbDifferences.ConstraintDifferences); infoMessage += "Constraints (" + (_dbDifferences.ConstraintDifferences.Count-_dbDifferences.ConstraintDifferences.CountByOutcome(Difference.DifferenceOutcome.Same)).ToString() + " of " + _dbDifferences.ConstraintDifferences.Count.ToString() + " diff)"; } // Get the table differences if (_includeTables) { _dbDifferences.TableDifferences = dbCompare.CompareTables(_databaseLeft, _databaseRight); ShowDifferences(lvTables, _dbDifferences.TableDifferences); infoMessage += "Tables (" + (_dbDifferences.TableDifferences.Count-_dbDifferences.TableDifferences.CountByOutcome(Difference.DifferenceOutcome.Same)).ToString() + " of " + _dbDifferences.TableDifferences.Count.ToString() + " diff)"; } // Get the stored proc differences if (_includeStoredProcedures) { _dbDifferences.StoredProcDifferences = dbCompare.CompareSchemaObjects(_databaseLeft, _databaseRight, Difference.DatabaseObjectType.StoredProcedure); ShowDifferences(lvProcedures, _dbDifferences.StoredProcDifferences); infoMessage += " Procs (" + (_dbDifferences.StoredProcDifferences.Count-_dbDifferences.StoredProcDifferences.CountByOutcome(Difference.DifferenceOutcome.Same)).ToString() + " of " + _dbDifferences.StoredProcDifferences.Count.ToString() + " diff)"; } // Get the function differences if (_includeFunctions) { _dbDifferences.FunctionDifferences = dbCompare.CompareSchemaObjects(_databaseLeft, _databaseRight, Difference.DatabaseObjectType.Function); ShowDifferences(lvFunctions, _dbDifferences.FunctionDifferences); infoMessage += " Functions (" + (_dbDifferences.FunctionDifferences.Count-_dbDifferences.FunctionDifferences.CountByOutcome(Difference.DifferenceOutcome.Same)).ToString() + " of " + _dbDifferences.FunctionDifferences.Count.ToString() + " diff)"; } // Get the view differences if (_includeViews) { _dbDifferences.ViewDifferences = dbCompare.CompareSchemaObjects(_databaseLeft, _databaseRight, Difference.DatabaseObjectType.View); ShowDifferences(lvViews, _dbDifferences.ViewDifferences); infoMessage += " Views (" + (_dbDifferences.ViewDifferences.Count-_dbDifferences.ViewDifferences.CountByOutcome(Difference.DifferenceOutcome.Same)).ToString() + " of " + _dbDifferences.ViewDifferences.Count.ToString() + " diff)"; } // Get the trigger differences if (_includeTriggers) { _dbDifferences.TriggerDifferences = dbCompare.CompareSchemaObjects(_databaseLeft, _databaseRight, Difference.DatabaseObjectType.Trigger); ShowDifferences(lvTriggers, _dbDifferences.TriggerDifferences); infoMessage += " Triggers (" + (_dbDifferences.TriggerDifferences.Count-_dbDifferences.TriggerDifferences.CountByOutcome(Difference.DifferenceOutcome.Same)).ToString() + " of " + _dbDifferences.TriggerDifferences.Count.ToString() + " diff)"; } infoMessage = "Complete: " + infoMessage; ShowInfoMessage(infoMessage); pbState.Value = 0; }
private void SaveResults(string fileName) { try { // Create a difference serializer and save DatabaseDifferences diffReport = new DatabaseDifferences(_dbDifferences.TableDifferences, _dbDifferences.ConstraintDifferences, _dbDifferences.ViewDifferences, _dbDifferences.StoredProcDifferences, _dbDifferences.FunctionDifferences, _dbDifferences.TriggerDifferences); diffReport.Save(fileName); } catch(Exception ex) { ShowInfoMessage("ERROR: " + ex.Message); } }