"Невозможно определить целевой поставщик базы данных" С 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.