我目前通过调用带有参数的批处理文件来使用 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 连接管理器并删除数据库。
如果对尝试什么或替代方法有任何建议,请告诉我。