delphi 判斷SQL Server 服務器是否安裝與開啟


 

1. 問題簡介:

       一般情況下,使用程序連接數據庫的時候,當數據庫服務器不存在,或者數據庫服務器沒有啟動的時候,

會導致數據庫連接失敗,所花費的時間很長。所以,在進行連接前,有必要對這些做出判斷,然后返回給用戶一

個正確的提示信息,減少等待的時間。

 


2. 數據庫服務器連接不上,可以分成以下幾種情況:
1>. 根本就不存在數據庫服務器,及系統根本就沒有安裝數據庫服務器。
2>. 系統安裝了數據庫服務器,但是數據庫服務器沒有開啟。
3>. 數據庫服務器開啟了,但是處於【暫停】或者【停止】的狀態。
4>. 當然還有最常見的,就是連接信息有問題。

 

解決辦法:
1.最簡單的辦法,直接使用異常提供的信息,Delphi的異常中,提供的錯誤類型很完善。
例如:
procedure TForm1.btn1Click(Sender: TObject);
begin
  try
      adocon1.Connected:=True;
  except
      on   E:exception   do
         Showmessage(E.message)
  end;
end;

注意: 但是在數據庫服務【停止】或者【未安裝】的情況下,由於連接數據庫拋出異常有一個超時時間,
       所以提示用戶連接不上所需時間很長,所以可以先判斷是否安裝,和數據庫服務器是否開啟(需要以下辦法),

      然后又異常來判斷服務器是在【啟動】狀態,還是在【暫停】狀態。



2.通過注冊表判斷系統是否安裝了SQL Server數據庫。
uses    Registry;
procedure TForm1.btn1Click(Sender: TObject);
var
  ARegistry: Tregistry;
  cdkey:string;
begin
  ARegistry := Tregistry.Create; 
  ARegistry.RootKey := HKEY_LOCAL_MACHINE;
  try
    ARegistry.OpenKey('SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\80\Registration', False);
    cdkey := ARegistry.ReadString('CD_KEY');
    if cdKey ='' then
      showmessage('沒有安裝SQL Server數據庫')
    else
      showmessage('安裝了SQL Server數據庫')
  except
    ARegistry.Destroy;
  end;
end;

注意:<1>.如果安裝的是綠色版,注冊表中不存在信息,不可以使用這種辦法。
           <2>.安裝SQL Server之后卸載,注冊表中的信息沒有修改,所以判斷可能是不正確,會提示已經安裝。


 

3. 通過進程判斷SQL Server數據庫服務器是否開啟

uses   Tlhelp32;
procedure   TForm1.Button1Click(Sender:   TObject);
var
    ProcessList   :   Thandle;
    pe   :   TPROCESSENTRY32;
    ProcList   :   TStringList;
    i   :   integer;
begin
    ProcList   :=   TStringList.Create;
    try
        ProcessList   :=   CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        pe.dwSize   :=   sizeof(TPROCESSENTRY32);
        if   process32first(ProcessList,pe)   then
        begin
            ProcList.Add(pe.szexefile);
            while   process32next(ProcessList,pe)   do
                ProcList.Add(pe.szexefile);
        end;
        for   i   :=   0   to   ProcList.Count   -1   do
            if   ProcList[i]   =   'sqlservr.exe '   then
                  ShowMessage( 'SQL   Server   already   Run! ');
    finally
        ProcList.Free;
    end;
end;

注意:SQL Server服務器的三種狀態:
<1>.【啟動】:進程中有 'sqlservr.exe',能進行訪問連接。
<2>.【暫停】:進程中有 'sqlservr.exe',不能進行訪問連接。
<3>.【停止】:進程中沒有 'sqlservr.exe',不能進行訪問連接。
在【暫停】或者【停止】的暫停下,不允許進行連接。

 


scm   -action   1   -slient   1   -service   mssqlserver     //啟動

scm   -action   6   -slient   1   -service   mssqlserver     //停止

 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM