2016-11-22 75 views
0

我可以知道.net中是否有任何库允许我传入2个连接字符串并进行模式比较和更新?C#自动Schema在SQL数据库和更新列表上比较

我需要这个的原因是因为我维护一个为不同客户部署到多个数据库的黄金数据库。如果每次数据库更新会花费很长时间,我需要手动执行模式比较。

我打算循环所有的客户端连接字符串,并与黄金数据库进行比较并自动更新它们。

请指教,谢谢。

回答

1

这是我做了什么。非常简单的解决方案。需要的nuget库如下所示,搜索并将它们包含在项目中。

<package id="Microsoft.SqlServer.Dac" version="1.0.3" targetFramework="net45" /> 
<package id="Microsoft.SqlServer.DacFx.x86" version="130.3485.1" targetFramework="net45" /> 

以下是样本代码。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 
using Microsoft.SqlServer.Dac.Compare; 

    namespace SchemaComparer 
    { 
     class Program 
     { 
      //The directory where all the scmp files are located 
      const string schemaDirectory = "C:\SchemaCompare\\"; 

      static void Main(string[] args) 
      { 
       //Loop thru all the scmp from the directory. This set to max 2 thread that run parallel and update together 
       Parallel.ForEach(Directory.GetFiles(schemaDirectory), new ParallelOptions { MaxDegreeOfParallelism = 2 }, (file) => 
       { 
        try 
        { 
         // Load comparison from Schema Compare (.scmp) file 
         var comparison = new SchemaComparison(file); 

         Console.WriteLine("Processing " + Path.GetFileName(file)); 
         Console.WriteLine("Comparing schema..."); 

         SchemaComparisonResult comparisonResult = comparison.Compare(); 

         // Publish the changes to the target database 
         Console.WriteLine("Publishing schema..."); 

         SchemaComparePublishResult publishResult = comparisonResult.PublishChangesToTarget(); 

         Console.WriteLine(publishResult.Success ? "Publish succeeded." : "Publish failed."); 
         Console.WriteLine(" "); 
        } 
        catch (Exception ex) 
        { 
         Console.WriteLine(ex.Message); 
        } 
       }); 

       Console.ReadLine(); 
      } 
     } 
    } 

编辑3 /月/ 2017年 我大概忘了提及的是,为了这个作品,你就必须创建SCMP文件,并将其存储在目录中,在我的情况“ C:\ SchemaCompare \”。该程序将拾取所有的scmp文件并进行比较和更新。因此,如果将来需要额外的数据库进行比较,只需创建scmp并保存在目录中即可。

+0

使用dac工具,您可以从源生成DACPAC并将其应用于各种数据库,而无需首先进行模式比较。 – ESG

+0

什么是DACPAC? – teapeng

+1

这是一个可以用于SQL Server的包格式。它可以通过SqlPackage工具或Management Studio甚至Visual Studio – ESG