C# SSDT如何从DACPAC文件创建新数据库?

C# SSDT如何从DACPAC文件创建新数据库?,c#,sql-server-data-tools,dacpac,schema-compare,sqlpackage,C#,Sql Server Data Tools,Dacpac,Schema Compare,Sqlpackage,目前正在使用SqlPackage.exe cmd line工具通过比较DacPac文件和目标数据库来生成脚本。这会 现在,我们希望将此切换为使用C部署Microsoft.Data.Tools.Msbuild Nuget包,但如果数据库容器不存在,则使用SchemaComparison进行比较将失败。似乎没有太多与包相关的文档 这个包中是否有任何工具允许我在比较之前创建一个空的数据库容器 我目前正在使用以下代码与现有数据库进行比较: SchemaCompareDacpacEndpoint sou

目前正在使用SqlPackage.exe cmd line工具通过比较DacPac文件和目标数据库来生成脚本。这会

现在,我们希望将此切换为使用C部署Microsoft.Data.Tools.Msbuild Nuget包,但如果数据库容器不存在,则使用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”登录失败。}

查看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);
        }
    }
}

这并不完全符合您的要求,但如果数据库不存在,为什么不手动创建它呢?如果不存在,请从sys.databases中选择*,其中name='test'创建数据库测试;