gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:57:16 25 4
gpt4 key购买 nike

目前使用 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”登录失败。

最佳答案

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

关于c# - SSDT 如何从 DACPAC 文件创建新数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45214736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com