注意:本文方案適用於ASP通過自開發組件連接所有類型的數據庫
現在某些企業的數據庫用的是informix,多數開發者對這個數據庫操作的比較少,
因為當前該公司已經被IBM吃掉,而IBM主推的是其DB2,不多述
使用olddb組件,通過server.createobject("adodb.connection")建立的連接,連
接都可以成功,但是速度是在滿的讓人驚慌,尤其數據條數超過2條的表,即使只
是查詢一條,也幾乎差不出來,整個ASP主機的效率直線下降,內存占用增加。對
待此問題,我使用Delphi寫了一個簡單的組件。
主要代碼如下:
unit main;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
ActiveX, Mtsobj, Mtx, ComObj, ASPbde_TLB, StdVcl,DB,dbtables,SysUtils;
type
Tbdeasp = class(TMtsAutoObject, IbdeASP)
PRotected
function open(const sqlstr, aliname: WideString): OleVariant;
safecall;
function execute(const sqlstr, connstr: WideString): OleVariant;
safecall;
{ Protected declarations }
end;
implementation
uses ComServ;
function TbdeASP.open(const sqlstr, aliname: WideString): OleVariant;
var
tmpre:variant;
begin
tmpre:=createoleobject('adodb.recordset');
try
tmpre.open(sqlstr,aliname);
except
end;
result:=tmpre;
end;
function TbdeASP.execute(const sqlstr, connstr: WideString): OleVariant;
var
tmpre:variant;
begin
tmpre:=createoleobject('adodb.connection');
try
tmpre.open(connstr);
tmpre.execute(sqlstr);
result:=1;
except
result:=0;
end;
end;
initialization
TAutoObjectFactory.Create(ComServer, Tbdeasp, Class_bdeASP,
ciMultiInstance, tmBoth);
end.
本程序中只寫了最簡單的兩個方法 open,execute ,大家可以根據自己的需求添加
其他方法、屬性等。
調用方法如下:
ser var=server.createobject("appname.bdeASP")
set rs=var.open("sql語句","數據庫連接語句")
rs使用方法與 adodb.recordset對象完全一樣,經測試,速度明顯加快!!!系統
消耗大量下降,2000萬條的數據表,查詢速度非常迅速。