public SchemaCompareWrapper(string dacPacFileLocation, string enpointConnectionString) { _dacPacFileLocation = dacPacFileLocation; _enpointConnectionString = enpointConnectionString; _sourceDacPac = new SchemaCompareDacpacEndpoint(dacPacFileLocation); _enpointDb = new SchemaCompareDatabaseEndpoint(enpointConnectionString); }
public void ScmFileBasedCompare(string srcConString, string targetConString) { var src = new SqlConnectionStringBuilder(srcConString); var bacPacFile = GetDacFileName(srcConString) + ".dacpac"; var dtVersion = DateTime.Now.ToString("yyyy.MM.dd.HHmmss"); //if Bac file not exists create new var dacService = new Microsoft.SqlServer.Dac.DacServices(srcConString); dacService.Extract(bacPacFile, src.InitialCatalog, "Test Application", Version.Parse(dtVersion)); var sourceDacpac = new SchemaCompareDacpacEndpoint(bacPacFile); var target = new SqlConnectionStringBuilder(targetConString); var targetDatabase = new SchemaCompareDatabaseEndpoint(targetConString); var comparison = new SchemaComparison(sourceDacpac, targetDatabase); // Persist comparison file to disk in Schema Compare (.scmp) format comparison.SaveToFile(@"C:\temp\mycomparison.scmp"); // Load comparison from Schema Compare (.scmp) file comparison = new SchemaComparison(@"C:\temp\mycomparison.scmp"); SchemaComparisonResult comparisonResult = comparison.Compare(); foreach (var d in comparisonResult.Differences) { Console.WriteLine(d.SourceObject.GetScript()); } // Find the change to table1 and exclude it. //foreach (SchemaDifference difference in comparisonResult.Differences) //{ // if (difference.TargetObject.Name != null && // difference.TargetObject.Name.HasName && // difference.TargetObject.Name.Parts[1] == "DbConnections") // { // comparisonResult.Exclude(difference); // break; // } //} // Publish the changes to the target database //SchemaComparePublishResult publishResult = comparisonResult.PublishChangesToTarget(); var publishResult = comparisonResult.GenerateScript("."); Console.WriteLine(publishResult.MasterScript); Console.WriteLine(publishResult.Script); Console.WriteLine(publishResult.Success ? "Publish succeeded." : "Publish failed."); }
//#r "C:\Program Files\Microsoft SQL Server\140\DAC\bin\Microsoft.SqlServer.Dac.Extensions.dll" public void Compare() { var csb = new SqlConnectionStringBuilder { DataSource = ".", InitialCatalog = "ICareMVCMaster", IntegratedSecurity = true }; var bacPacFile = @"C:\temp\icaremvcmaster.dacpac"; var s = new Microsoft.SqlServer.Dac.DacServices(csb.ConnectionString); s.Extract(bacPacFile, "IcareMVCMaster", "Test Application", new Version("1.1.1.1")); var sourceDacpac = new SchemaCompareDacpacEndpoint(bacPacFile); var csb2 = new SqlConnectionStringBuilder { DataSource = ".", InitialCatalog = "New_ICareMVCMaster", IntegratedSecurity = true }; var targetDatabase = new SchemaCompareDatabaseEndpoint(csb2.ToString()); var comparison = new SchemaComparison(sourceDacpac, targetDatabase); // Persist comparison file to disk in Schema Compare (.scmp) format comparison.SaveToFile(@"C:\temp\mycomparison.scmp"); // Load comparison from Schema Compare (.scmp) file comparison = new SchemaComparison(@"C:\temp\mycomparison.scmp"); SchemaComparisonResult comparisonResult = comparison.Compare(); // Find the change to table1 and exclude it. //foreach (SchemaDifference difference in comparisonResult.Differences) //{ // if (difference.TargetObject.Name != null && // difference.TargetObject.Name.HasName && // difference.TargetObject.Name.Parts[1] == "DbConnections") // { // comparisonResult.Exclude(difference); // break; // } //} // Publish the changes to the target database //SchemaComparePublishResult publishResult = comparisonResult.PublishChangesToTarget(); var publishResult = comparisonResult.GenerateScript("."); Console.WriteLine(publishResult.MasterScript); Console.WriteLine(publishResult.Script); Console.WriteLine(publishResult.Success ? "Publish succeeded." : "Publish failed."); }
private SchemaCompareEndpointInfo GetEndpointInfo(bool source, SchemaCompareEndpoint endpoint) { SchemaCompareEndpointInfo endpointInfo = new SchemaCompareEndpointInfo(); // if the endpoint is a dacpac we don't need to parse the xml SchemaCompareDacpacEndpoint dacpacEndpoint = endpoint as SchemaCompareDacpacEndpoint; if (dacpacEndpoint != null) { endpointInfo.EndpointType = SchemaCompareEndpointType.Dacpac; endpointInfo.PackageFilePath = dacpacEndpoint.FilePath; } else { // need to parse xml to get connection string of database var result = this.scmpInfo.Descendants("ConnectionBasedModelProvider"); string searchingFor = source ? "Source" : "Target"; try { if (result != null) { foreach (XElement node in result) { if (node.Parent.Name.ToString().Contains(searchingFor)) { endpointInfo.ConnectionDetails = SchemaCompareService.ConnectionServiceInstance.ParseConnectionString(node.Value); endpointInfo.ConnectionDetails.ConnectionString = node.Value; endpointInfo.DatabaseName = endpointInfo.ConnectionDetails.DatabaseName; endpointInfo.EndpointType = SchemaCompareEndpointType.Database; } } } } catch (Exception e) { ErrorMessage = string.Format(SR.OpenScmpConnectionBasedModelParsingError, ((SchemaCompareDatabaseEndpoint)endpoint).DatabaseName, e.Message); Logger.Write(TraceEventType.Error, string.Format("Schema compare open scmp operation failed during xml parsing with exception {0}", e.Message)); throw; } } return(endpointInfo); }