【问题标题】:SSDT How can I create a new database from a DACPAC file?SSDT 如何从 DACPAC 文件创建新数据库?
【发布时间】:2017-12-26 03:39:21
【问题描述】:

目前使用 SqlPackage.exe 命令行工具通过将 DacPac 文件与目标数据库进行比较来生成脚本。这将是Create the database if it doesn't already exist。

我们现在想将此切换为使用 Microsoft.Data.Tools.Msbuild Nuget 包(使用 C# 进行部署),但是当数据库容器不存在时,使用 SchemaComparison 进行比较将失败。似乎没有太多与该软件包相关的文档。

此软件包中是否有任何工具可以让我在比较之前创建一个空的数据库容器?

我目前正在使用以下代码(与现有数据库进行比较时有效):

 SchemaCompareDacpacEndpoint sourceDacpac = new SchemaCompareDacpacEndpoint(@"C:\DeployDB.dacpac");

        SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder();
        csb.DataSource = @".";
        csb.InitialCatalog = "DeployTestDB";
        csb.IntegratedSecurity = true;
        SchemaCompareDatabaseEndpoint targetDatabase = new SchemaCompareDatabaseEndpoint(csb.ToString());


        SchemaComparison comparison = new SchemaComparison(sourceDacpac, targetDatabase);
        comparison.Options.DropObjectsNotInSource = true;
        comparison.Options.BlockOnPossibleDataLoss = false;
        comparison.Options.TreatVerificationErrorsAsWarnings = true;
        comparison.Options.ScriptDatabaseOptions = true;
        comparison.Options.GenerateSmartDefaults = true;

        SchemaComparisonResult comparisonResult = comparison.Compare();

此时,ComparisonResult 有一个错误信息: {错误 SQL0:无法打开登录请求的数据库“DeployTestDB”。登录失败。用户“myUsername”登录失败。}

【问题讨论】:

  • 不完全符合您的要求,但是如果数据库不存在,为什么不手动创建数据库呢?如果不存在(select * from sys.databases where name = 'test') create database test;

标签: c# sql-server-data-tools dacpac schema-compare sqlpackage


【解决方案1】:

看看 Microsoft.SqlServer.Dac.dll 中的 DacServices 类。

代码如下所示:

using Microsoft.SqlServer.Dac;

class Program
{
    static void Main(string[] args)
    {
        DacServices ds = new DacServices(@"Data Source=SERVERNAME;Initial Catalog=DATABASENAME;Integrated Security=true");
        using (DacPackage dp = DacPackage.Load(@"C:\temp\mydb.dacpac"))
        {
            ds.Deploy(dp, @"DATABASENAME", upgradeExisting: false, options: null, cancellationToken: null);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2012-05-04
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多