设为首页 收藏本站
查看: 886|回复: 0

[经验分享] delphi 判断SQL Server 服务器是否安装与开启

[复制链接]

尚未签到

发表于 2016-11-3 11:34:33 | 显示全部楼层 |阅读模式
  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 = '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 //停止


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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-295178-1-1.html 上篇帖子: SQL Server Profiler 矢量字体小问题 下篇帖子: SQL Server 自动更新统计信息的基本算法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表