zoukankan      html  css  js  c++  java
  • 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('SOFTWAREMICROSOFTMICROSOFT SQL SERVER80Registration', 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     //停止

     
     
     
     
     
     
     
     
  • 相关阅读:
    Java——方法的重载
    JS数据类型之String类型
    常用的正则表达式
    关于前端面试遇到的问题值类型和引用类型,1rem等于多少像素
    JS数据类型之Number类型
    常用前端面试题链接
    Wpf 父子容器的关系 ^
    心情 ^
    sharepoint_wf 启动窗口设计,支配给自由域用户 ^
    WPF 单个触发器、多个触发器、多条件触发器 ^
  • 原文地址:https://www.cnblogs.com/lantianhf/p/6112129.html
Copyright © 2011-2022 走看看