关于连接不上MS-SQL 数据库整个程序卡死的问题

时间:2022-12-18 08:16:22
我有一个用vb.net写的程序,主界面的右下角有一个信息显示,那个信息是隔几分钟读取数据库显示的,但是万一数据库服务器连接不上的时候,整个程序界面会卡死,影响其他功能。

有没有办法让它读取数据库连接不上的时候不卡程序界面?Timer控件依旧隔几分钟连接数据库,连不上的算了,连得上就更新显示右下角信息,不影响界面的其他功能。

请帮忙给出例子代码,谢谢!

9 个解决方案

#1


在连接字符串中写timeout,默认链接30秒,你可以改成3秒
这个不是command的timeout,链接的timeout只能写在连接字符串中

#2


引用 1 楼 starfd 的回复:
在连接字符串中写timeout,默认链接30秒,你可以改成3秒
这个不是command的timeout,链接的timeout只能写在连接字符串中


是这样子吗?
SqlConnection conn = new SqlConnection(" Uid=sa;Pwd=***;Initial Catalog=Northwind;Data Source=LocalHost;Connect Timeout=900")

那个timeout的单位是秒吗?

#3


应该是的,你查下呢

#4


上面是一个方法,但难免还会有短暂的卡顿,你也可以选择线程解决,用线程解决这类问题的更多一些。

#5


引用 4 楼 ajianchina 的回复:
上面是一个方法,但难免还会有短暂的卡顿,你也可以选择线程解决,用线程解决这类问题的更多一些。

确实是这样,刚才测试了一下,还是会有几秒种的卡顿,我自己想到了以前使用过My.Application.DoEvents(),一会再测试下,线程的方法我不太熟悉,不知道有什么例子程序没有?

#6


经测试,My.Application.DoEvents()无效果

#7


引用 5 楼 seeto的回复:
Quote: 引用 4 楼 ajianchina 的回复:

上面是一个方法,但难免还会有短暂的卡顿,你也可以选择线程解决,用线程解决这类问题的更多一些。

确实是这样,刚才测试了一下,还是会有几秒种的卡顿,我自己想到了以前使用过My.Application.DoEvents(),一会再测试下,线程的方法我不太熟悉,不知道有什么例子程序没有?

兄弟,提高自学能力,这是一个很简单的线程使用,我这边没有现成的例子,我去搜跟你搜一样,不过注意资源释放,以免内存递增。

#8


引用 7 楼 ajianchina 的回复:
Quote: 引用 5 楼 seeto的回复:
Quote: 引用 4 楼 ajianchina 的回复:

上面是一个方法,但难免还会有短暂的卡顿,你也可以选择线程解决,用线程解决这类问题的更多一些。

确实是这样,刚才测试了一下,还是会有几秒种的卡顿,我自己想到了以前使用过My.Application.DoEvents(),一会再测试下,线程的方法我不太熟悉,不知道有什么例子程序没有?

兄弟,提高自学能力,这是一个很简单的线程使用,我这边没有现成的例子,我去搜跟你搜一样,不过注意资源释放,以免内存递增。

正在搜了,我的自学能力很高了,我不是做计算机的,我编程是业余自学的,只是时间不多,想上来问问少走弯路。也想吐槽一下vb.net 入门的书太多,没有一本实用……

#9


我希望大家有能力帮到别人的话,就帮帮忙吧。

我最近学习了System.Timers.Timer,用这个解决了问题,也学习了很多东西,特高兴,简单描述一下,希望对后来者有用:

用代码生成System.Timers.Timer,它将与Form不在同一线程上运行,于是用System.Timers.Timer去读取数据库并刷新Label的信息,不会卡界面。但是由于System.Timers.Timer相对于Form来说是另一线程的,调试的时候会不通过,不能访问Label,但直接运行程序是没有什么问题的。如果要解决的话,就要用 Label.Invoke(New MethodInvoker(AddressOf……) 去访问控件Label,这样调试就不会出错了,直接运行也没发现什么问题。

#1


在连接字符串中写timeout,默认链接30秒,你可以改成3秒
这个不是command的timeout,链接的timeout只能写在连接字符串中

#2


引用 1 楼 starfd 的回复:
在连接字符串中写timeout,默认链接30秒,你可以改成3秒
这个不是command的timeout,链接的timeout只能写在连接字符串中


是这样子吗?
SqlConnection conn = new SqlConnection(" Uid=sa;Pwd=***;Initial Catalog=Northwind;Data Source=LocalHost;Connect Timeout=900")

那个timeout的单位是秒吗?

#3


应该是的,你查下呢

#4


上面是一个方法,但难免还会有短暂的卡顿,你也可以选择线程解决,用线程解决这类问题的更多一些。

#5


引用 4 楼 ajianchina 的回复:
上面是一个方法,但难免还会有短暂的卡顿,你也可以选择线程解决,用线程解决这类问题的更多一些。

确实是这样,刚才测试了一下,还是会有几秒种的卡顿,我自己想到了以前使用过My.Application.DoEvents(),一会再测试下,线程的方法我不太熟悉,不知道有什么例子程序没有?

#6


经测试,My.Application.DoEvents()无效果

#7


引用 5 楼 seeto的回复:
Quote: 引用 4 楼 ajianchina 的回复:

上面是一个方法,但难免还会有短暂的卡顿,你也可以选择线程解决,用线程解决这类问题的更多一些。

确实是这样,刚才测试了一下,还是会有几秒种的卡顿,我自己想到了以前使用过My.Application.DoEvents(),一会再测试下,线程的方法我不太熟悉,不知道有什么例子程序没有?

兄弟,提高自学能力,这是一个很简单的线程使用,我这边没有现成的例子,我去搜跟你搜一样,不过注意资源释放,以免内存递增。

#8


引用 7 楼 ajianchina 的回复:
Quote: 引用 5 楼 seeto的回复:
Quote: 引用 4 楼 ajianchina 的回复:

上面是一个方法,但难免还会有短暂的卡顿,你也可以选择线程解决,用线程解决这类问题的更多一些。

确实是这样,刚才测试了一下,还是会有几秒种的卡顿,我自己想到了以前使用过My.Application.DoEvents(),一会再测试下,线程的方法我不太熟悉,不知道有什么例子程序没有?

兄弟,提高自学能力,这是一个很简单的线程使用,我这边没有现成的例子,我去搜跟你搜一样,不过注意资源释放,以免内存递增。

正在搜了,我的自学能力很高了,我不是做计算机的,我编程是业余自学的,只是时间不多,想上来问问少走弯路。也想吐槽一下vb.net 入门的书太多,没有一本实用……

#9


我希望大家有能力帮到别人的话,就帮帮忙吧。

我最近学习了System.Timers.Timer,用这个解决了问题,也学习了很多东西,特高兴,简单描述一下,希望对后来者有用:

用代码生成System.Timers.Timer,它将与Form不在同一线程上运行,于是用System.Timers.Timer去读取数据库并刷新Label的信息,不会卡界面。但是由于System.Timers.Timer相对于Form来说是另一线程的,调试的时候会不通过,不能访问Label,但直接运行程序是没有什么问题的。如果要解决的话,就要用 Label.Invoke(New MethodInvoker(AddressOf……) 去访问控件Label,这样调试就不会出错了,直接运行也没发现什么问题。