首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VSDBCMD无法确定“目标数据库架构提供程序”,但只有在指定/ConnectionString时才能确定

使用VSDBCMD无法确定“目标数据库架构提供程序”,但只有在指定/ConnectionString时才能确定
EN

Stack Overflow用户
提问于 2013-05-08 01:45:36
回答 1查看 1.2K关注 0票数 1

我一直在开发一个部署脚本来将我们的数据库项目部署到多个数据库实例中。我是通过手动运行来测试它的。它是一个非常简单的脚本,只对为部署我们的基础或模板数据库而创建的部署清单运行VSDBCMD。为了部署到同一服务器上的不同数据库,脚本使用部署清单,然后还指定/p:DatabaseName和/p:TargetDatabase属性。

这一整天都在工作。

我们对这些数据库使用SQL Server身份验证,我希望能够将用户名和密码指定为脚本的参数,这样就不必硬编码它们。我看到这样做的唯一方法是使用/ConnectionString交换机。这就是导致失败的原因。即使我指定了与部署清单中存储的连接字符串完全相同的连接字符串,脚本也会失败,错误是“无法确定目标数据库架构提供程序”。剧本:

代码语言:javascript
复制
function DeployDatabase([string] $manifestPath, [string] $password, [string] $instance, [string] $server, [string] $user)
{
    $vsdbcmdPath = "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy"
    $vsdbcmd = "$vsdbcmdPath\vsdbcmd.exe"
    $outputScriptPath = "$instance.sql"
    $logPath = "$instance.log"
    $connectionString = "Data Source=$server;User ID=$user;"
    & $vsdbcmd /dd /dsp:SQL /manifest:$manifestPath /a:Deploy /p:DatabaseName=$instance /p:TargetDatabase=$instance /script:$outputScriptPath /cs:"$connectionString" | 
        Out-File -FilePath $logPath
}

# Actual call is omitted to protect the $server, $user and $password

只要省略/cs开关,就可以再次成功。请注意,上面的连接字符串甚至没有必要在连接字符串中指定密码才能导致失败。

目标数据库服务器正在运行server 2008 R2,并且是最新的修补程序。

我想知道如何避免这个错误,或者我想知道一种更好的方法来在部署时指定用户名和密码,而不要求密码以明文形式出现在部署清单中。

EN

回答 1

Stack Overflow用户

发布于 2014-05-20 16:27:53

我也有同样的问题。您是否试图设置实例名称?

连接字符串中的SQL实例名可以是不对

此外,如果设置了用户Id和密码,如果没有使用集成安全,请检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16431349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档