我通过inno setup使用OSQL
执行一些sql查询。我使用以下代码来运行OSQL
。这仅仅是为了目的
SQLQuery:= '"EXEC sp_addserver ''PCNAME'';"';
Param:= '-S(local) -Usa -Psa -Q ' + SQLQuery;
Exec('osql.exe', Param, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
这很好用。问题是ResultCode
值始终为0.即使查询未执行。例如,如果我尝试下面的同一个查询,我传入一个无效的存储过程名称,ResultCode
仍为0。
SQLQuery:= '"EXEC sp_invalidname ''PCNAME'';"';
Param:= '-S(local) -Usa -Psa -Q ' + SQLQuery;
Exec('osql.exe', Param, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
为什么不给我一个正确的代码。如果我在管理工作室中运行第二个查询,我会收到类似这样的错误
Msg 2812, Level 16, State 62, Line 1
Could not find stored procedure 'sp_invalidname'
此处返回代码为2812
。当我通过inno运行它时,为什么不能得到它。我需要做什么才能在inno中获取此错误代码?
答案 0 :(得分:2)
感谢TLama,我更新了我的代码,现在正在运行。我不得不添加-b
命令行参数,现在如果命令失败则返回1.
-b 指定osql退出并在发生错误时返回DOS ERRORLEVEL值。当SQL Server错误消息的严重性为11或更高时,返回到DOS ERRORLEVEL变量的值为1;否则,返回的值为0. Microsoft MS-DOS批处理文件可以测试DOS ERRORLEVEL的值并适当地处理错误。
我更新了我的代码,如下所示。
Param:= '-S(local) -Usa -Psa -b -Q ' + SQLQuery;
在documentation中解释。