C#自动架构比较SQL数据库列表和更新



我可以知道.NET中是否有任何库可以让我通过2个连接字符串并进行架构进行比较和更新?

我需要这个原因是因为我维护一个金色数据库,该数据库为不同客户部署到多个数据库。如果我需要每次使用数据库更新会消耗很长时间时,请从VS手动进行架构进行比较。

我计划通过所有客户端连接字符串循环并进行比较,并自动更新它们。

请建议,谢谢。

这就是我所做的。一个非常简单的解决方案。所需的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();
            }
        }
    }

编辑在2017年11月3日我可能会忘记提到,为了使其有效,您必须创建SCMP文件并将其存储在目录中,在我的情况下," C: schemacompare "。该程序将拾取所有SCMP文件,并进行比较和更新。因此,如果您将来需要其他数据库来比较,只需创建SCMP并保留在目录中。

devart具有一些支持命令行自动化的架构比较工具,并且可能能够完成您的需求:https://www.devart.com/devart.com/dbforge/sql/sqlforge/sqhemacompare/schemacompare/

相关内容

  • 没有找到相关文章

最新更新