"Невозможно определить целевой поставщик базы данных" С VSDBCMD, но только когда указано /ConnectionString

Я разрабатывал сценарий развертывания для развертывания нашего проекта базы данных на нескольких экземплярах базы данных. Я проверяю это, выполняя это вручную. Это очень простой сценарий, и он просто запускает VSDBCMD для манифеста развертывания, созданного для развертывания нашей базы или базы данных шаблонов. Для развертывания в разных базах данных на одном сервере скрипт использует манифест развертывания, но затем также указывает свойства /p:DatabaseName и /p:TargetDatabase.

Это работает весь день.

Мы используем проверку подлинности SQL Server для этих баз данных, и я хотел иметь возможность указать имя пользователя и пароль в качестве параметров сценария, чтобы их не нужно было жестко кодировать. Единственный способ сделать это - использовать ключ /ConnectionString. Вот что послужило причиной неудачи. Даже когда я указываю точно такую ​​же строку подключения, которая хранится в манифесте развертывания, сценарий завершается с ошибкой "Не удалось определить целевой поставщик базы данных". Сценарий:

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, вы снова сможете добиться успеха. Обратите внимание на строку подключения выше, что даже нет необходимости указывать пароль в строке подключения, чтобы вызвать сбой.

Целевой сервер базы данных работает под управлением SQL Server 2008 R2 и обновлен до исправлений.

Я хотел бы знать, как избежать этой ошибки, иначе я хотел бы узнать лучший способ указать имя пользователя и пароль при развертывании, не требуя, чтобы пароль находился в манифесте развертывания в открытом тексте.

1 ответ

У меня та же проблема. Вы пытались установить имя экземпляра?

Имя экземпляра SQL в строке подключения может быть неправильным.

Также дважды проверьте, если установлены Идентификатор пользователя и Пароль, если вы не используете Integrated Security.

Другие вопросы по тегам