使用 Microsoft.SqlServer.Dac.DacServices 在单用户模式下发布 dacpac

Posted

技术标签:

【中文标题】使用 Microsoft.SqlServer.Dac.DacServices 在单用户模式下发布 dacpac【英文标题】:Publish dacpac in single user mode using Microsoft.SqlServer.Dac.DacServices 【发布时间】:2015-09-11 13:18:47 【问题描述】:

我想以单用户模式发布 dac pac,以防止在数据库升级时进行不必要的数据库更改。为此,我在 Microsoft.SqlServer.Dac.DacServices 中使用了 Deploy 功能。

那个函数有一个参数 DacDeployOptions 选项。我在该选项中设置了DeployDatabaseInSingleUserMode = true。即使它设置为 true,我也可以在 dacpac 部署时进行 db 操作。

我有什么遗漏吗?或者有没有其他方法可以实现这一点。

我们将不胜感激!

【问题讨论】:

我看到其他人有类似的问题 - 你能生成脚本并查看它是否在顶部附近有一个 ALTER DATABASE SET SINGLE_USER ...? 【参考方案1】:

您使用的是哪个版本的 DacFX?如果不是最新的,最好买最新的,因为很多旧的都不太擅长识别你指定的选项。

或者,你可以这样做(这是我所做的,而不是试图让 DacFX 正常工作。

            ServerConnection connection = new ServerConnection(ServerName);
            Server sqlServer = new Server(connection);
            Database QADatabase = sqlServer.Databases[DatabaseName];
            QADatabase.DatabaseOptions.UserAccess = DatabaseUserAccess.Single;
            QADatabase.Alter(TerminationClause.RollbackTransactionsImmediately);
            QADatabase.Refresh();

//DACPAC logic goes here

            QADatabase.DatabaseOptions.UserAccess = DatabaseUserAccess.Multiple;
            QADatabase.Alter(TerminationClause.RollbackTransactionsImmediately);
            QADatabase.Refresh();

【讨论】:

以上是关于使用 Microsoft.SqlServer.Dac.DacServices 在单用户模式下发布 dacpac的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)