首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

ADOCommand怎样批量执行sql语句,该怎么解决

2012-02-15 
ADOCommand怎样批量执行sql语句有如下语句需通过ADOCommand执行,不知道如何实现,求指教。IF NOT EXISTS (SE

ADOCommand怎样批量执行sql语句
有如下语句需通过ADOCommand执行,不知道如何实现,求指教。

IF NOT EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'mydb') CREATE DATABASE [mydb] 
use master 
GO 
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)  
  drop procedure [dbo].[p_killspid]  
GO  
  create proc p_killspid @dbname sysname as declare @s nvarchar(1000)  
  declare tb cursor local for  
  select s='kill '+cast(spid as varchar) from master..sysprocesses  
  where dbid=db_id(@dbname) open tb  
  fetch next from tb into @s  
  while @@fetch_status=0 begin exec(@s) fetch next from tb into @s end  
  close tb deallocate tb  
GO 
exec p_killspid 'mydb'  
RESTORE DATABASE mydb FROM DISK ='C:\Documents and Settings\Administrator\桌面\11.bak'

[解决办法]

[解决办法]
直接把语句给ADOCommand->CommandText 
然后一次性 Execute() 不行吗?我记得是可以的。

如果这些语句是保存到文件里的 也可以用 
DOQuery1->SQL->LoadFromFile();
DOQuery1->ADOQuery1->ExecSQL() ;

[解决办法]
最好做成存储过程用TADOStore调用。
[解决办法]
还或者用TStringList。

因为SQL脚本中的Go是单独成行的,所以比较好判断,另外脚本中最好不要含有注释语句,如果注释过长的话会换行,这样要多判断一次。
另外SQL脚本要是Ansi格式,不要生成Unicode的,否则不能正确运行。

C/C++ code
void __fastcall TForm1::Button1Click(TObject *Sender){        TStringList * SQL = new TStringList;        SQL->LoadFromFile(ExtractFilePath(Application->ExeName) + "SQLScript");        ADOCommand1->CommandText = "";        for(int i = 0; i < SQL->Count; i++)        {                //遇到GO语句,执行                if(SQL->Strings[i] == "GO")                        ADOCommand1->Execute();                else                //清除注释                if(SQL->Strings[i].SubString(0,2) == "/*" || SQL->Strings[i].SubString(SQL->Strings[i].Length()-2 ,2) == "*/")                {                }                else                //不是GO,不是注释,不为空,则是SQL的执行语句                if(SQL->Strings[i].Trim() != "" && SQL->Strings[i].Trim() != " " )                        ADOCommand1->CommandText += SQL->Strings[i] + " ";        }} 

热点排行