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     //停止

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Delphi可以使用ADO(ActiveX Data Objects)来操作SQL Server服务器,包括文件上传和下载。常情况下,上传和下载文件都是SQL Server的BLOB(Binary Large Object)数据类型来实现的。 在上传文件时,可以使用ADODB.Stream对象来将文件数据读入到BLOB字段中。下面是一个示例代码: var FS: TFileStream; Stream: TStream; BLOBStream: TStream; cn: TADOConnection; qry: TADOQuery; chunkSize, bufSize, bytesRead: LongInt; buffer: PByte; filePath: string; begin // 创建连接 cn := TADOConnection.Create(nil); cn.ConnectionString := 'Provider=SQLOLEDB;Data Source=YourServerName;Initial Catalog=YourDatabaseName;Integrated Security=SSPI;'; cn.LoginPrompt := False; cn.Connected := True; // 创建查询 qry := TADOQuery.Create(nil); qry.Connection := cn; qry.SQL.Text := 'INSERT INTO YourTableName (FileName, FileData) VALUES (:FileName, :FileData)'; qry.Parameters.ParseSQL(qry.SQL.Text, True); // 打开文件 filePath := 'C:\YourFilePath\YourFileName.ext'; FS := TFileStream.Create(filePath, fmOpenRead or fmShareDenyWrite); // 读取数据到BLOB字段中 chunkSize := 4096; // 每次上传的块大小 bufSize := chunkSize * SizeOf(Byte); buffer := AllocMem(bufSize); try Stream := FS; BLOBStream := qry.CreateBlobStream(qry.Parameters.ParamByName('FileData'), bmWrite); repeat bytesRead := Stream.Read(buffer^, bufSize); if bytesRead > 0 then BLOBStream.Write(buffer^, bytesRead); until bytesRead < bufSize; qry.Parameters.ParamByName('FileName').Value := ExtractFileName(filePath); qry.ExecSQL(); finally FreeMem(buffer); FS.Free; qry.Free; cn.Free; end; end; 在下载文件时,可以使用TStreamAdapter对象将BLOB字段中的数据读入到TFileStream对象中。下面是一个示例代码: var cn: TADOConnection; qry: TADOQuery; filePath: string; begin // 创建连接 cn := TADOConnection.Create(nil); cn.ConnectionString := 'Provider=SQLOLEDB;Data Source=YourServerName;Initial Catalog=YourDatabaseName;Integrated Security=SSPI;'; cn.LoginPrompt := False; cn.Connected := True; // 创建查询 qry := TADOQuery.Create(nil); qry.Connection := cn; qry.SQL.Text := 'SELECT FileData FROM YourTableName WHERE FileName = :FileName'; qry.Parameters.ParseSQL(qry.SQL.Text, True); qry.Parameters.ParamByName('FileName').Value := 'YourFileName.ext'; qry.Open(); // 写入文件 filePath := 'C:\YourFilePath\YourFileName.ext'; with TFileStream.Create(filePath, fmCreate) do try TStreamAdapter.Create(qry.CreateBlobStream(qry.FieldByName('FileData'), bmRead)).CopyTo(Self, 0); finally Free; end; end; 以上就是Delphi操作SQL Server服务器上传下载文件的基本步骤。注意,代码中使用的连接字符串、表名、字段名等需要替换成实际情况下的值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值