我目前正在通过调用带参数的批处理文件来使用osnt和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连接管理器并删除数据库。
如果有任何关于尝试尝试或替代方法的建议,请告诉我。
答案 0 :(得分:2)
以下是一些建议
也许通过尝试其中的一些,你可以缩小到底发生了什么。在评论中发布您的发现,我将很乐意尝试和帮助。
答案 1 :(得分:0)
我想你可能想尝试参数的ORDER ......我似乎记得OSQL对参数顺序的敏感性过去曾被咬过。
这就是我现在所拥有的......抱歉。
答案 2 :(得分:0)
我猜%3仅扩展为“-U”。
可能这可以通过
来解决SET Server=%1
SET Database=%2
SHIFT
SHIFT
osql -S %Server% ... %* -Q "...%Database%..."
或者将属性值设置为包含双引号。
评论后更新:
请参阅this article,了解如何从shell变量中删除引号,并应用于第3个参数。