大家看我写的对吗?

时间:2022-11-21 17:11:51
我想实现电脑开机时检测SQL Server服务是否在运行,如果没在运行,则启动服务


 ServiceController sc = new ServiceController();
                sc.ServiceName = "MSSQL$SQLEXPRESS";
                if (sc.Status != ServiceControllerStatus.Running) 
                {
                    sc.Stop();
                    sc.Start(); 
                    sc.Refresh();
                }


上面写的对吗?先Stop再重新start?

16 个解决方案

#1


先停止在开始,你也不能开始后停止啊

#2


既然你可以设置开机运行你的程序。
那么你可以可以设置sql server开机自动运行。

#3


引用 1 楼 jjx0224 的回复:
先停止在开始,你也不能开始后停止啊

我就是怕程序运行了,数据库还没加载好,程序就会报错了。。

#4


用程序控制不怎么好,在配置器上设置自动启动比较好。

#5


引用 2 楼 findcaiyzh 的回复:
既然你可以设置开机运行你的程序。
那么你可以可以设置sql server开机自动运行。


是这样的,程序需要向数据库里读和写,如果在开机的时候,程序已经开始运行了,而数据库还没加载好,程序就会报错了。。

#6


引用 4 楼 ayouxinping 的回复:
用程序控制不怎么好,在配置器上设置自动启动比较好。


数据库自动启动是必须的,但是就是怕程序先于数据库运行的话,就会报错。

#7


引用 6 楼 hengsf2008 的回复:
引用 4 楼 ayouxinping 的回复:
用程序控制不怎么好,在配置器上设置自动启动比较好。


数据库自动启动是必须的,但是就是怕程序先于数据库运行的话,就会报错。


在程序中判断比较好,如果出错接sleep30秒后,重试。

#8


引用 7 楼 glest 的回复:
引用 6 楼 hengsf2008 的回复:

引用 4 楼 ayouxinping 的回复:
用程序控制不怎么好,在配置器上设置自动启动比较好。


数据库自动启动是必须的,但是就是怕程序先于数据库运行的话,就会报错。


在程序中判断比较好,如果出错接sleep30秒后,重试。


请问是让服务sleep30秒还是让程序的线程sleep30秒呢?

#9


让程序sleep30秒,然后再访问。

#10


引用 6 楼 hengsf2008 的回复:
引用 4 楼 ayouxinping 的回复:
用程序控制不怎么好,在配置器上设置自动启动比较好。


数据库自动启动是必须的,但是就是怕程序先于数据库运行的话,就会报错。


如果你的程序是应用程序也不是系统服务的话,那么你的程序启动时,数据库肯定已经成功启动了(前提:你的数据库设置为自动启动,且数据库没有发生错误),那就不存在数据库问题了

但是如果你的程序是系统服务,那么你可以设置你的系统服务,依懒于数据库的服务,这样,你的系统服务在启动前,肯定会先启动数据库服务

#11


你用程序判断数据库服务是否开启 如果没有开启 你应该弹出个对话框提示 正在等待数据库服务启动,然后让程序休眠30s然后再检查 等数据库服务启动后 提示框消失,程序运行

#12


请问是直接Thread.Sleep(30000)就休眠了,然后30秒后程序还能运行吗?

#13


引用 12 楼 hengsf2008 的回复:
请问是直接Thread.Sleep(30000)就休眠了,然后30秒后程序还能运行吗?


当前线程自动让出CPU使用权(Sleep),然后继续运行。

#14


哦,谢谢各位,我总结了一下,就是程序在开机运行时休眠30秒(或更多)
ServiceController sc = new ServiceController();
                sc.ServiceName = "MSSQL$SQLEXPRESS";
                if (sc.Status != ServiceControllerStatus.Running) 
                {
                    Thread.Sleep(30000);
                }

这样应该就能避免了。。

#15


引用 9 楼 ayouxinping 的回复:
让程序sleep30秒,然后再访问。


正解

#16


没连数据库程序就报错,这个太不友好了,你可以捕捉提示啊

#1


先停止在开始,你也不能开始后停止啊

#2


既然你可以设置开机运行你的程序。
那么你可以可以设置sql server开机自动运行。

#3


引用 1 楼 jjx0224 的回复:
先停止在开始,你也不能开始后停止啊

我就是怕程序运行了,数据库还没加载好,程序就会报错了。。

#4


用程序控制不怎么好,在配置器上设置自动启动比较好。

#5


引用 2 楼 findcaiyzh 的回复:
既然你可以设置开机运行你的程序。
那么你可以可以设置sql server开机自动运行。


是这样的,程序需要向数据库里读和写,如果在开机的时候,程序已经开始运行了,而数据库还没加载好,程序就会报错了。。

#6


引用 4 楼 ayouxinping 的回复:
用程序控制不怎么好,在配置器上设置自动启动比较好。


数据库自动启动是必须的,但是就是怕程序先于数据库运行的话,就会报错。

#7


引用 6 楼 hengsf2008 的回复:
引用 4 楼 ayouxinping 的回复:
用程序控制不怎么好,在配置器上设置自动启动比较好。


数据库自动启动是必须的,但是就是怕程序先于数据库运行的话,就会报错。


在程序中判断比较好,如果出错接sleep30秒后,重试。

#8


引用 7 楼 glest 的回复:
引用 6 楼 hengsf2008 的回复:

引用 4 楼 ayouxinping 的回复:
用程序控制不怎么好,在配置器上设置自动启动比较好。


数据库自动启动是必须的,但是就是怕程序先于数据库运行的话,就会报错。


在程序中判断比较好,如果出错接sleep30秒后,重试。


请问是让服务sleep30秒还是让程序的线程sleep30秒呢?

#9


让程序sleep30秒,然后再访问。

#10


引用 6 楼 hengsf2008 的回复:
引用 4 楼 ayouxinping 的回复:
用程序控制不怎么好,在配置器上设置自动启动比较好。


数据库自动启动是必须的,但是就是怕程序先于数据库运行的话,就会报错。


如果你的程序是应用程序也不是系统服务的话,那么你的程序启动时,数据库肯定已经成功启动了(前提:你的数据库设置为自动启动,且数据库没有发生错误),那就不存在数据库问题了

但是如果你的程序是系统服务,那么你可以设置你的系统服务,依懒于数据库的服务,这样,你的系统服务在启动前,肯定会先启动数据库服务

#11


你用程序判断数据库服务是否开启 如果没有开启 你应该弹出个对话框提示 正在等待数据库服务启动,然后让程序休眠30s然后再检查 等数据库服务启动后 提示框消失,程序运行

#12


请问是直接Thread.Sleep(30000)就休眠了,然后30秒后程序还能运行吗?

#13


引用 12 楼 hengsf2008 的回复:
请问是直接Thread.Sleep(30000)就休眠了,然后30秒后程序还能运行吗?


当前线程自动让出CPU使用权(Sleep),然后继续运行。

#14


哦,谢谢各位,我总结了一下,就是程序在开机运行时休眠30秒(或更多)
ServiceController sc = new ServiceController();
                sc.ServiceName = "MSSQL$SQLEXPRESS";
                if (sc.Status != ServiceControllerStatus.Running) 
                {
                    Thread.Sleep(30000);
                }

这样应该就能避免了。。

#15


引用 9 楼 ayouxinping 的回复:
让程序sleep30秒,然后再访问。


正解

#16


没连数据库程序就报错,这个太不友好了,你可以捕捉提示啊