如何从ASP页面运行sqlcmd.exe?
问题描述:
作为我们的数据库修订控制(和自动安装)过程的一部分,我们需要能够在ASP页面内的各种.sql文件上运行sqlcmd.exe。我使用的是做到这一点的代码是:如何从ASP页面运行sqlcmd.exe?
Dim cmd : cmd = "sqlcmd -S " & DATABASE_SERVER & " -U " & DATABASE_UID & " -P " & DATABASE_PWD & " -d " & DATABASE_NAME & " -i """ & scriptPath & """ -b"
Dim wshShell : Set wshShell = Server.CreateObject("WScript.Shell")
Dim return : return = wshShell.Run(cmd, 0, True)
我有我的工作开发机器上的代码(运行XP),但现在我已经部署到它有问题我们的Windows 2003服务器。问题是,返回值总是1.这也会发生,如果我试图让它运行一个批处理文件或其他任何我能想到的(如果我将cmd的值更改为一个不存在的文件,它会弹出正如我所料)
我试着添加I_USR和I_WAM在sqlcmd.exe和cmd.exe上都有执行权限,但它仍然返回1.如果我在服务器上打开命令提示符并执行“ runas/user:servername \ i_usr sqlcmd.exe“工作正常,但从ASP页面运行仍然不起作用。
此外,手动运行.sql脚本时,所有操作都可以顺利进行,因此对它们没有任何问题。
服务器上是否有任何安全设置,我忘了在IIS或Windows中更改以使其正常工作?
在此先感谢互联网。
答
这个问题是通过改变第一线,以解决:
Dim cmd : cmd = "%COMSPEC% /C sqlcmd -S " & DATABASE_SERVER & " -U " & DATABASE_UID & " -P " & DATABASE_PWD & " -d " & DATABASE_NAME & " -i """ & scriptPath & """ -b"
答
你应该改变
cmd = "sqlcmd -S ...
到
cmd = "\windows\sqlcmd.exe -S ..
(或任何以sqlcmd.exe的完整路径是无空格)
只是为了排除路径问题。