首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结合使用osql和nant脚本

结合使用osql和nant脚本
EN

Stack Overflow用户
提问于 2008-11-21 14:57:16
回答 3查看 2K关注 0票数 1

我现在通过调用一个带参数的批处理文件来使用osql和nant。下面是我的nant脚本中定义的属性(不是,不是真正的用户名/密码值):

代码语言:javascript
复制
<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连接:

代码语言:javascript
复制
<if test="${username==''}">
  <property name="osql.connection" value="-E" />
</if>
<if test="${username!=''}">
  <property name="osql.connection" value="-U ${username} -P ${password}" />
</if>

然后我将这些值传递到我的批处理文件中:

代码语言:javascript
复制
<exec program="setup.bat">
   <arg value="${server}"/>
   <arg value="${database}" />
   <arg value="${osql.connection}" />
</exec>

setup.bat文件使用osql删除数据库:

代码语言:javascript
复制
osql -S %1 -d master %3 -Q "IF EXISTS (SELECT * FROM sysdatabases WHERE name = N'%2') DROP DATABASE [%2]"

如果我不将用户名/密码传递给nant脚本,而是使用集成的安全性("-E“传递给osql),则可以很好地工作。如果我指定了用户名/密码,那么nant脚本就会暂停(就像在等待一些输入一样)。我知道我指定的用户名/密码是正确的,因为我可以登录到SQL连接管理器并删除数据库。

请让我知道,如果有任何建议,尝试什么或替代方法来做到这一点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-11-21 15:37:56

以下是一些建议

  1. 为了帮助诊断nant/批处理脚本的问题,回显正在执行的完整osql命令(来自批处理脚本)会很有帮助。当然,这是为了确保在提供用户名/通行证时正确地扩展osql.connection。
  2. 您使用批处理脚本可能还有其他原因,我们对此并不知情。但是,为了帮助诊断问题,您可以使用直接传入osql.exe作为程序的exec任务。同样,这只是为了去掉批处理脚本,看看它是否可以直接使用osql.exe。此外,您还可以在执行之前使用echo任务回显整个命令字符串。
  3. 对于一种完全不同的方法,您可以尝试sql任务,它是NAntContrib发行版的一部分。很多时候,它是osql.exe的一个非常好的替代品。

也许通过尝试其中的一些,你可以缩小正在发生的事情的范围。将你的发现发表在评论中,我很乐意尝试并提供帮助。

票数 2
EN

Stack Overflow用户

发布于 2008-11-21 15:07:58

我想你可能想尝试一下你的参数的顺序...我似乎记得过去被OSQL对参数顺序的敏感性所困扰。

这就是我目前所有的..。抱歉的。

票数 0
EN

Stack Overflow用户

发布于 2008-11-21 15:30:10

我猜%3仅扩展为"-U“。

也许这可以通过以下方式解决:

代码语言:javascript
复制
SET Server=%1
SET Database=%2
SHIFT 
SHIFT
osql -S %Server% ... %* -Q "...%Database%..."

或将属性值设置为包含双引号。

评论后更新:

有关如何从外壳变量中删除引号以及如何应用于第三个参数的信息,请参阅this article

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/309014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档