MFC程序开机自动重启后连接SQL SERVER2005数据库出现异常

littlefangMFC 2009-10-30 04:00:53
我的MFC程序设置为开机自动启动,程序中有连接SQL数据库的代码,但是开机自动启动后不能正确连接数据库,我怀疑是数据库服务器尚未启动,于是从网上找了代码先检测数据库服务器是否启动,确认启动后再连接数据库,可是有时成功有时则失败,错误代码为80004005,如果我在判断完数据库服务器启动后让程序sleep5秒以上则可以正常连接,期待高手赐教!谢谢
附上我检测数据库服务器是否启动的代码:
	SC_HANDLE  SC_Hand; 
SC_HANDLE Service_Hand;
SERVICE_STATUS status;

SC_Hand=OpenSCManager("127.0.0.1",SERVICES_ACTIVE_DATABASE,SC_MANAGER_ALL_ACCESS);
if (NULL == SC_Hand)
{
g_pExceptionLog.WriteExceptionLog(-1,"CMFD_Svr_MainFrame","TestSQLStartOrNot()","","打开SC_Hand失败");
return false;
}
Service_Hand=OpenService(SC_Hand, "MSSQLSERVER", SERVICE_ALL_ACCESS);

QueryServiceStatus(Service_Hand, &status);
if(status.dwCurrentState==SERVICE_RUNNING)
{
//数据库服务器已经启动
return true;
}
if(status.dwCurrentState == SERVICE_STOPPED)
{
//数据库服务器没有启动
return false;
}
if(status.dwCurrentState == SERVICE_PAUSED)
{
//数据库服务器暂停
return false;
}
...全文
220 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
littlefangMFC 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 oyljerry 的回复:]
数据库服务启动后,可能还有一些初始化工作,这个只能sleep延时以及,加一个重试机制,重连几次..
[/Quote]谢谢
oyljerry 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 littlefangmfc 的回复:]
引用 10 楼 yinshisike 的回复:
在使用数据库之前检查是否连接,如没连接就连一次,如果已经连接,就直接用.
即是检测到数据库服务器已经启动,再进行连接还是会出现错误,只能检测到数据库服务器启动以后sleep一段时间才行
[/Quote]
数据库服务启动后,可能还有一些初始化工作,这个只能sleep延时以及,加一个重试机制,重连几次..
littlefangMFC 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yinshisike 的回复:]
在使用数据库之前检查是否连接,如没连接就连一次,如果已经连接,就直接用.
[/Quote]即是检测到数据库服务器已经启动,再进行连接还是会出现错误,只能检测到数据库服务器启动以后sleep一段时间才行
yinshisike 2009-11-01
  • 打赏
  • 举报
回复
在使用数据库之前检查是否连接,如没连接就连一次,如果已经连接,就直接用.
心留 2009-11-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tr0j4n 的回复:]
你可以弄个While死循环,Try catch中每隔一段时间去连接下,每次连接之后Sleep下。如果连接成功,则Break循环
[/Quote]

同意
littlefangMFC 2009-11-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tr0j4n 的回复:]
你可以弄个While死循环,Try catch中每隔一段时间去连接下,每次连接之后Sleep下。如果连接成功,则Break循环
[/Quote]我试过这个方法,第一次就catch到com错误了
MoXiaoRab 2009-10-31
  • 打赏
  • 举报
回复
你可以弄个While死循环,Try catch中每隔一段时间去连接下,每次连接之后Sleep下。如果连接成功,则Break循环
littlefangMFC 2009-10-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tr0j4n 的回复:]
单服务起来了不说明问题。
[/Quote]请问那应该怎么判断都准备好了呢?
littlefangMFC 2009-10-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arong1234 的回复:]
服务起来,不代表其内部功能完全初始化好了
[/Quote]
请问那应该怎么判断都准备好了呢?
MoXiaoRab 2009-10-30
  • 打赏
  • 举报
回复
单服务起来了不说明问题。
arong1234 2009-10-30
  • 打赏
  • 举报
回复
服务起来,不代表其内部功能完全初始化好了
[Quote=引用 2 楼 littlefangmfc 的回复:]
引用 1 楼 zyq5945 的回复:
系统刚启动,可能有些系统程序或者SQL程序未完全初始化好,等待5秒再连接没问题的话就等5秒吧
可是这样我总觉得不是很塌实,不放心,想搞明白一些
[/Quote]
littlefangMFC 2009-10-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zyq5945 的回复:]
系统刚启动,可能有些系统程序或者SQL程序未完全初始化好,等待5秒再连接没问题的话就等5秒吧
[/Quote]可是这样我总觉得不是很塌实,不放心,想搞明白一些
zyq5945 2009-10-30
  • 打赏
  • 举报
回复
系统刚启动,可能有些系统程序或者SQL程序未完全初始化好,等待5秒再连接没问题的话就等5秒吧

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧