运行SQL Server脚本以在Inno安装程序中使用cmd更新数据库

问题描述

我正在使用Inno安装程序进行的安装程序更新sql server数据库。 我在cmd中写这行命令

sqlcmd -s myserverName -U sa  -P MyPass -d myDataBase -i scriptAddress

它可以正常工作,我想在Inno设置中执行同样的操作,并编写以下代码

procedure UpdateDataBase;
var
 Param:String;
 Kode : integer;
 FileName :String;
begin
 InstanceName:= DEF_INSTANCENAME;
 InstancePass:= DEF_DBPASSWORD;
 DataBaseName:= DEF_DATABASENAME;
 serverName:= 'SINA-PC\RMPRO';
 FileName:= 'C:\Update2008to2018.sql';
 Param:= ' sqlcmd -S '+ServerName+' -U sa -P '+ InstancePass+ ' -d '+ DataBaseName+ ' -i '+  
   FileName;        
  if  Exec('cmd.exe',param,'',SW_SHOW,ewWaitUntilTerminated,kode) then
     begin
       showMessage('Tamam');
    end;

end;

但是调用此过程后,我有一个空的cmd窗口。我该怎么办

解决方法

您可能应该直接调用sqlcmd.exe而不是作为cmd.exe的参数。因此,您应该有类似的东西(尚未测试,但应该可以开始使用):

pgm := 'sqlcmd.exe';
Param := '-S '+ServerName+' -U sa -P '+ InstancePass+ ' -d '+ DataBaseName+ ' -i '+ FileName;        
if  Exec(pgm,param,'',SW_SHOW,ewWaitUntilTerminated,kode) then
begin
  MsgBox('Done.',mbInformation,MB_OK);
end;