天天看點

delphi 資料庫操作類

轉自:http://liucanwei509.blog.163.com/blog/static/171261132011112104242689/

unit DbHelper;

interface

uses Classes,DB, ADODB,SysUtils,UProcParameter;

type

 TDbHelper=class

 class function GetANewCon(conString:string):TADOConnection;

 private

   FAdoCon:TADOConnection;

   FConString:string;

   function GetAdoCon:TADOConnection;

 public

   property AdoCon:TADOConnection read GetAdoCon;

   function OpenSql(Sql: String): TDataSet;

   procedure ExecSql(Sql: String);

   procedure ExecSqlTran(SqlList: TStringList);

   function IsExistsRec(Sql: String): Boolean;

   function GetFirstFieldAsInt(Sql: String): Integer;

   function GetFirstFieldAsStr(Sql: String): string;

   constructor Create(conString:string);reintroduce;

   destructor Destroy;override;

   function OpenProc(procName:string;procParams:TProcParameters):TDataSet;

   procedure ExecProc(procName: string; procParams: TProcParameters);

 end;

implementation

{ TDbHelper }

constructor TDbHelper.Create(conString:string);

begin

 inherited Create;

 FConString:=conString;

end;

destructor TDbHelper.Destroy;

 inherited Destroy;

 if Assigned(FAdoCon) then FreeAndNil(FAdoCon);

function TDbHelper.GetAdoCon: TADOConnection;

 Result:=FAdoCon;

 if not Assigned(FAdoCon) then

   FAdoCon:=TAdoConnection.Create(nil);

 if not FAdoCon.Connected then

 begin

   FAdoCon.ConnectionString:=FConString;

   FAdoCon.KeepConnection:=True;

   FAdoCon.LoginPrompt:=False;

   FAdoCon.Open;

class function TDbHelper.GetANewCon(conString: string): TADOConnection;

 Result:=TAdoConnection.Create(nil);

 Result.ConnectionString:=conString;

 Result.KeepConnection:=True;

 Result.LoginPrompt:=False;

 Result.Open;

function TDbHelper.OpenSql(Sql: String): TDataSet;

var

 AQuery:TAdoQuery;

 Result:=nil;

 AQuery:=TAdoQuery.Create(nil);

 AQuery.Connection:=GetAdoCon;

 AQuery.SQL.Text:=Sql;

 AQuery.Open;

 Result:=AQuery;

procedure TDbHelper.ExecSql(Sql: String);

 try

   AQuery.Connection:=GetAdoCon;

   AQuery.SQL.Text:=Sql;

   AQuery.ExecSQL;

 finally

   AQuery.Close;

   FreeAndNil(AQuery);

procedure TDbHelper.ExecSqlTran(SqlList: TStringList);

 Sql:String;

 i:Integer;

   AQuery.Connection.BeginTrans;

   try

     for i:=0 to SqlList.Count-1 do

     begin

       Sql:=SqlList.Strings[i];

       AQuery.SQL.Text:=Sql;

       AQuery.ExecSQL;

       AQuery.Close;

     end;

     AQuery.Connection.CommitTrans;

   except

     AQuery.Connection.RollbackTrans;

   end;

function TDbHelper.IsExistsRec(Sql: String): Boolean;

 AResSet:TDataSet;

 Result:=False;

 AResSet:=OpenSql(Sql);

 if AResSet<>nil then

   Result:=AResSet.RecordCount>0;

   AResSet.Close;

   FreeAndNil(AResSet);

function TDbHelper.GetFirstFieldAsInt(Sql:String): Integer;

 Result:=-1;

   AQuery:=TAdoQuery.Create(nil);

   AQuery.Open;

   if AQuery.RecordCount>0 then

   begin

     Result:=AQuery.Fields.Fields[0].AsInteger;

   if Assigned(AQuery) then FreeAndNil(AQuery);

function TDbHelper.GetFirstFieldAsStr(Sql: String): String;

 Result:='';

     Result:=AQuery.Fields.Fields[0].AsString;

function TDbHelper.OpenProc(procName:string;procParams:TProcParameters):TDataSet;

 aProc:TADOStoredProc;

 aParameter:TProcParameter;

 aProc:=TADOStoredProc.Create(nil);

 aProc.Connection:=GetAdoCon;

 aProc.ProcedureName:=procName;

 for i:=0 to procParams.Count-1 do

   aParameter:=procParams.GetParameter(i);

   with aProc.Parameters.AddParameter do

     Name:=aParameter.Name;

     DataType:=aParameter.DataType;

     Direction:=aParameter.Direction;

     if aParameter.Size<>0 then Size:=aParameter.Size;

     Value:=aParameter.Value;

 aProc.Open;

 Result:=aProc;