Использование osql со скриптами nant - PullRequest
1 голос
/ 21 ноября 2008

В настоящее время я использую osql с nant, вызывая командный файл с аргументами. Вот свойства, которые определены в моем скрипте 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>

Затем я передаю эти значения в мой командный файл:

<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 и удалить базу данных.

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

Ответы [ 3 ]

2 голосов
/ 21 ноября 2008

Вот несколько предложений

  1. Чтобы помочь диагностировать проблему с помощью сценария nant / batch, было бы полезно вывести полную команду osql (из пакетного сценария), которая выполняется. Это, конечно, чтобы убедиться, что osql.connection правильно раскрывается, когда указывается имя пользователя / пароль.
  2. Возможно, есть другие причины, по которым вы используете пакетный скрипт, к которому мы не причастны. Однако, чтобы помочь диагностировать проблему, вы можете использовать задачу exec , непосредственно передающую в качестве программы программу osql.exe. Опять же, это просто, чтобы вынуть пакетный скрипт, чтобы увидеть, работает ли он, используя osql.exe напрямую. Кроме того, с этим вы сможете выводить всю командную строку перед выполнением, используя задачу echo .
  3. Для совершенно другого подхода вы можете попробовать задачу sql , входящую в дистрибутив NAntContrib . Много раз, это очень хорошая альтернатива osql.exe.

Может быть, попробовав некоторые из них, вы сможете сузить, что именно происходит. Опубликуйте свои выводы в комментариях, и я с радостью постараюсь помочь.

0 голосов
/ 21 ноября 2008

Полагаю, что% 3 расширяется только до "-U".

Возможно, это можно решить с помощью

SET Server=%1
SET Database=%2
SHIFT 
SHIFT
osql -S %Server% ... %* -Q "...%Database%..."

ИЛИ установите значение свойства для включения двойных кавычек.

Обновление после комментария:

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

0 голосов
/ 21 ноября 2008

Я думаю, вы, возможно, захотите поэкспериментировать с ЗАКАЗОМ ваших параметров ... Кажется, я помню, как в прошлом укусил чувствительность OSQL к порядку параметров.

Это все, что у меня есть ... извини.

...