欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

關于批量執行SQL語句

系統 2331 0

在數據庫應用中,一般我們是用企業管理器來創建數據庫,表,存儲過程,觸發器等。然后再導出SQL語句到一個 *.sql 文件里。然后我們在查詢分析器執行這些語句即可。

當然,我們更想在程序中去執行這些語句,而不是再去打開查詢分析器。

當我們要在程序中批量執行SQL時,需要明白AdoConnection,或AdoQuery(假設我們使用ADO組件)可以執行的語句有什么要求。

1、在查詢分析器里,一條SQL語句,我們可以直接寫成

Select * from aTable where ID=123

或者

Select * from aTable where ID=123;

這兩條語句結果相同。不同的地方只是第二條多了一個“;”,用來表示一條語句結束。

2、在查詢分析器里,多條SQL語句的寫法

insert into aTable(Field1,Field2) values( '值一','值二')

go

這里的 go 表示一個批處理

?

根據以上兩點,我們可以看出,我們要在程序中批量執行SQL語句,需要判斷一個完整的操作包含幾條語句,這些語句是不是可以單獨執行等。

下面是一個示例程序(程序中不涉及到Select操作)

代碼
unit?BatchSQL;?
{?
???批量執行SQL腳本?
???E
- main:?goldli@ 163 .com?
}?
interface ?
uses?
??SysUtils,ADODB,Classes;?

type?
???TOnException?
= ?procedure( const ?E:?Exception)?of? object ;?
???TOnSQLExecute?
= ?procedure( const ?strSQL:? string ; const ?RowsAffected:Integer)?of? object ;?

type?
??{完整的SQL語句}?
??TSQLString?
= ? class ?
??
private ?
????FBuffer:
string ;?
????FSQL:TStrings;?
????FChanged:Boolean;?
????function?GetSQL:
string ;?
??
public ?
????constructor?Create;?
????destructor??Destroy;
override ;?
????procedure???Append(
const ?StrSQL: string );?
????property????SQL:
string ?read?GetSQL;?
??end;?

??TBatchSQL?
= ? class ?
??
private ?
????FConnection:TADOConnection;?
????FSQLList:TList;?
????FOnException:TOnException;?
????FOnSQLExecute:TOnSQLExecute;?
??
public ?
????constructor?Create(
const ?AConnection:TADOConnection);?
????destructor??Destroy;
override ;?
????property??Connection:TADOConnection?write?FConnection;?
????procedure?LoadFromFile(
const ?FileName: string );?
????procedure?Execute;?
????property??OnException:TOnException?write?FOnException;?
????property??OnSQLExecute:TOnSQLExecute?write?FOnSQLExecute;?
??end;?

implementation?

{?TSQLString?}?

procedure?TSQLString.Append(
const ?StrSQL:? string );?
begin?
??FSQL.Append(StrSQL);?
??FChanged:
= True;?
end;?

constructor?TSQLString.Create;?
begin?
??FSQL:
= TStringList.Create;?
end;?

destructor?TSQLString.Destroy;?
begin?
??FSQL.Free;?
??inherited;?
end;?

function?TSQLString.GetSQL:?
string ;?
begin?
??
if ?FChanged?then?
??begin?
????FBuffer:
= FSQL.Text;?
????FChanged:
= False;?
??end;?
??Result:
= FBuffer;?
end;?

{?TBatchSQL?}?

constructor?TBatchSQL.Create(
const ?AConnection:?TADOConnection);?
begin?
??
if ?Assigned(AConnection)?then?
????FConnection:
= AConnection;?
??FSQLList:
= TList.Create;?
end;?

destructor?TBatchSQL.Destroy;?
var?
??i:Integer;?
begin?
??FConnection:
= nil;?
??
for ?i: = ?FSQLList.Count? - 1 ?downto? 0 ? do ?
????TSQLString(FSQLList.Items[i]).Free;?
??FSQLList.Free;?
??inherited;?
end;?

procedure?TBatchSQL.Execute;?
var?
??i:Integer;?
??Qry:TADOQuery;?
??SQLString:TSQLString;?
begin?
??Assert(Assigned(FConnection),
' 數據庫連接不能為nil. ' );?
??Assert(FSQLList.count?
> ? 0 , ' 請先加載SQL文件. ' );?
??FConnection.LoginPrompt:
= False;?
??FConnection.Connected:
= True;?
??Qry:
= TADOQuery.Create(nil);?
??with?Qry?
do ?
??begin?
????Connection:
= FConnection;?
????Prepared:
= True;?
????
for ?i: = 0 ?to?FSQLList.Count? - 1 ? do ?
????begin?
??????SQLString:
= TSQLString(FSQLList.Items[i]);?
??????SQL.Clear;?
??????SQL.Add(SQLString.SQL);?
??????
try ?
????????ExecSQL;?
????????
if ?Assigned(FOnSQLExecute)?then?
??????????FOnSQLExecute(SQLString.SQL,RowsAffected);?
??????except?
????????on?E:Exception?
do ?
??????????
if ?Assigned(FOnException)?then?
????????????FOnException(E)?
??????????
else ?
????????????raise?Exception.Create(
' SQL語句出錯: ' ? + ?sLineBreak? + ?SQLString.SQL);?
??????end;?
????end;?
????Free;?
??end;??
end;?

procedure?TBatchSQL.LoadFromFile(
const ?FileName:? string );?
var?
??SqlStr,Tmp:
string ;?
??F:TextFile;?
??SQLString:TSQLString;?
begin?
??Assert(FileExists(FileName),
' SQL文件不存在,不能加載. ' );??
??AssignFile(F,FileName);?
??Reset(f);?
??Repeat?
????Readln(F,Tmp);?
????
if ?Tmp = ' GO ' ?then?
????begin?
??????SQLString:
= TSQLString.Create;?
??????SQLString.Append(SqlStr);?
??????FSQLList.Add(SQLString);?
??????SqlStr:
= '' ;?
??????Tmp:
= '' ;?
????end;?
????SqlStr:
= SqlStr? + ?Tmp;?
??Until?eof(F);?
??Closefile(F);?
end;?

end.

?

?

關于批量執行SQL語句


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲国产婷婷香蕉久久久久久99 | 一级毛片视频免费 | 中文字幕一区在线观看视频 | 国产精彩视频 | 亚洲精品人成网在线播放影院 | 日产乱码卡一卡2卡三卡四麻豆 | 五月婷婷综合在线视频 | 99视频这里有精品 | 免费观看的av| 国产成人激情 | 91制服 | 久久香蕉国产线熟妇人妻 | 亚洲精品一区二区三区福利 | 国产精品岛国久久久久久 | 欧美一区二区三区免费视频 | 91精品国产爱久久久久 | 日韩欧美精品在线观看 | 中文字幕在线观看av | 小明天天看| 国产一三区A片在线播放 | 亚洲国产一区二区三区四区 | 国产美女小视频 | 91九色porn偷拍在线 | 99热久久66是国产免费 | 日韩 第一页 | 欧美一区二区免费 | 中文字幕一区二区在线观看 | 亚洲精品乱码久久久久久蜜桃 | 人人看人人干 | 精品国产一区二区三区久久久 | 国产一区二 | 欧美一级视 | 激情丁香开心久久综合 | 中国黄色一级生活片 | 国产91成人精品亚洲精品 | a级片视频网站 | 久久这里只有精品23 | 午夜精品久久久久久91 | 亚洲精品一区二区三区不 | 黄色免费网站在线观看 | 欧美一区二区黄 |