我现在通过调用一个带参数的批处理文件来使用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连接管理器并删除数据库。
请让我知道,如果有任何建议,尝试什么或替代方法来做到这一点。
发布于 2008-11-21 15:37:56
以下是一些建议
也许通过尝试其中的一些,你可以缩小正在发生的事情的范围。将你的发现发表在评论中,我很乐意尝试并提供帮助。
发布于 2008-11-21 15:07:58
我想你可能想尝试一下你的参数的顺序...我似乎记得过去被OSQL对参数顺序的敏感性所困扰。
这就是我目前所有的..。抱歉的。
发布于 2008-11-21 15:30:10
我猜%3仅扩展为"-U“。
也许这可以通过以下方式解决:
SET Server=%1
SET Database=%2
SHIFT
SHIFT
osql -S %Server% ... %* -Q "...%Database%..."或将属性值设置为包含双引号。
评论后更新:
有关如何从外壳变量中删除引号以及如何应用于第三个参数的信息,请参阅this article。
https://stackoverflow.com/questions/309014
复制相似问题