В настоящее время я использую osql с nant, вызывая командный файл с аргументами. Вот свойства, которые определены в моем NANT сценарии (значения нет, а не реальные имя пользователя/пароль):Использование osql с nant скриптами
<property name="project.config" value="debug" />
<property name="server" value="(local)" />
<property name="database" value="Test" />
<property name="username" value="sa" />
<property name="password" value="password" />
Я затем создать соединение Osql на основе имени пользователя/пароля:
<if test="${username==''}">
<property name="osql.connection" value="-E" />
</if>
<if test="${username!=''}">
<property name="osql.connection" value="-U ${username} -P ${password}" />
</if>
I затем передать эти значения на мой командный файл:
<exec program="setup.bat">
<arg value="${server}"/>
<arg value="${database}" />
<arg value="${osql.connection}" />
</exec>
setup.bat файл использует OSQL, чтобы удалить базу данных:
osql -S %1 -d master %3 -Q "IF EXISTS (SELECT * FROM sysdatabases WHERE name = N'%2') DROP DATABASE [%2]"
Это прекрасно работает, если я не передаю имя пользователя/пароль сценарию nant и не использую встроенную защиту («-E» для osql). Если я укажу имя пользователя/пароль, тогда сценарий nant просто приостанавливается (например, он ожидает ввода). Я знаю, что я указываю правильное имя пользователя/пароль, поскольку я могу войти в SQL Connection Manager и удалить базу данных.
Пожалуйста, дайте мне знать, если есть какие-либо предложения о том, что можно попробовать или альтернативных способов сделать это.
Проблема заключается в файле osql, а не в exec, поскольку я запускал их отдельно и получал ту же ошибку. OSQL был отозван как osql -S (local) -d Test " -U sa -P password "-Q" ..... ", который, похоже, не работает. Я рассмотрю задачу sql. – 2008-11-21 16:14:50