gpt4 book ai didi

sql-server - 如何捕获 DacServices.Deploy 输出?

转载 作者:行者123 更新时间:2023-12-02 07:00:45 25 4
gpt4 key购买 nike

所以我已经成功部署了我们的 DACPAC schema via Octopus 。我正在使用 Deploy.ps1 脚本与 .Net 对象交互,就像本文所述。

我希望通过在我们的 Octopus 日志中包含从 sqlcmd 获得的“标准输出”,使部署过程更加透明。我正在寻找生成的架构修改消息以及我们的开发人员放入前/后脚本中的任何自定义迁移消息。

我能想到的唯一解决方法是首先使用 DACPAC 服务生成脚本,然后使用 sqlcmd.exe 运行它。有什么想法吗?

最佳答案

找到解决方案,发布以防其他人遇到此问题。您只需订阅 DacService 的 Message event

C# 示例:

var services = new Microsoft.SqlServer.Dac.DacServices("data source=machinename;Database=ComicBookGuy;Trusted_connection=true");

var package = Microsoft.SqlServer.Dac.DacPackage.Load(@"C:\Database.dacpac");

var options = new Microsoft.SqlServer.Dac.DacDeployOptions();
options.DropObjectsNotInSource = true;
options.SqlCommandVariableValues.Add("LoginName", "SomeFakeLogin");
options.SqlCommandVariableValues.Add("LoginPassword", "foobar!");

services.Message += (object sender, Microsoft.SqlServer.Dac.DacMessageEventArgs eventArgs) => Console.WriteLine(eventArgs.Message.Message);

services.Deploy(package, "ComicBookGuy", true, options);

Powershell 示例(由 Octopus 触手执行):

# This script is run by Octopus on the tentacle
$localDirectory = (Get-Location).Path
$tagetServer = $OctopusParameters["SQL.TargetServer"]
$databaseName = "ComicBookGuy"

Add-Type -path "$localDirectory\lib\Microsoft.SqlServer.Dac.dll"

$dacServices = New-Object Microsoft.SqlServer.Dac.DacServices ("data source=" + $tagetServer + ";Database=" + $databaseName + "; Trusted_connection=true")
$dacpacFile = "$localDirectory\Content\Unity.Quotes.Database.dacpac"

$dacPackage = [Microsoft.SqlServer.Dac.DacPackage]::Load($dacpacFile)

$options = New-Object Microsoft.SqlServer.Dac.DacDeployOptions
$options.SqlCommandVariableValues.Add("LoginName", $OctopusParameters["SQL.LoginName"])
$options.SqlCommandVariableValues.Add("LoginPassword", $OctopusParameters["SQL.LoginPassword"])
$options.DropObjectsNotInSource = $true

Register-ObjectEvent -InputObject $dacServices -EventName "Message" -Action { Write-Host $EventArgs.Message.Message } | out-null

$dacServices.Deploy($dacPackage, $databaseName, $true, $options)

在 powershell 版本中,我无法使用方便的“Add_EventName”样式的事件通知,因此我不得不使用笨重的 cmdlet。嗯。

关于sql-server - 如何捕获 DacServices.Deploy 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31348925/

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