请教VB.NET的TIMER控件不停连接MYSQL数据库的问题!

时间:2021-10-31 18:05:49
1.我用VB.NET的TIMER控件设计一个不停连接MYSQL数据库的界面(约5秒连接一次),连接后执行SELECT命令,然后把读取到的数据存到DATAGRID里,之后再做其他操作。
2.请问这样频繁的读取操作会不会影响到MYSQL数据库的工作,因为还有其他应用程序要使用这个数据库,我需要执行完SELECT命令后执行 *Conn.CLOSE关闭数据库连接操作么?还是一直不关闭连接也没影响???请大家赐教!

17 个解决方案

#1


能不用轮询就不用轮询。

#2


1:这种设计非常不好,即便一定要这么做,那么timer的事件里先暂停timer,完成后再启用。避免上一次访问还没结束又开始新的访问。同时尽可能在业务许可的范围内,加大间隔时间。
2:要关掉connection

#3


1.谢谢两位的指导,但是我需要尽快的知道目标数据库的表中有没有新增的条目,如果我不用这样不停查询的方式,该有什么方法呢?
2.我现在的TIMER是30秒查询数据库一次,在TIMER中用到的MySqlDataAdapter,DataSet等对象,应该要在timer过程结束后用dispose销毁吧,不然一段时间后不会造成内存溢出???

#4


引用 3 楼 lgk99 的回复:
1.谢谢两位的指导,但是我需要尽快的知道目标数据库的表中有没有新增的条目,如果我不用这样不停查询的方式,该有什么方法呢?
2.我现在的TIMER是30秒查询数据库一次,在TIMER中用到的MySqlDataAdapter,DataSet等对象,应该要在timer过程结束后用dispose销毁吧,不然一段时间后不会造成内存溢出???

DataSet是托管资源,不需要手动释放
数据库连接close就行了,也不需要dispose
你只要保证每次连接完释放,不要把连接池给占满了,不会有大问题

#5


引用 4 楼 Z65443344 的回复:
Quote: 引用 3 楼 lgk99 的回复:

1.谢谢两位的指导,但是我需要尽快的知道目标数据库的表中有没有新增的条目,如果我不用这样不停查询的方式,该有什么方法呢?
2.我现在的TIMER是30秒查询数据库一次,在TIMER中用到的MySqlDataAdapter,DataSet等对象,应该要在timer过程结束后用dispose销毁吧,不然一段时间后不会造成内存溢出???

DataSet是托管资源,不需要手动释放
数据库连接close就行了,也不需要dispose
你只要保证每次连接完释放,不要把连接池给占满了,不会有大问题


感谢大侠相助和解释!!!!!!那MySqlDataAdapter需要DISPOSE吗?

#6


1.肯定会影响
2.肯定要关闭连接。

#7


影响是肯定会影响,但是会产生多大影响,要看你到底去查什么东西
如果你只查主键的最大值,来跟你目前保存的比较,看是否有新纪录,那么影响几乎是微乎其微的,而且你5S连接一次频率也并不算高
千万不要把里面数据都弄出来遍历

MySqlDataAdapter的问题
你可以这样用
using(MySqlDataAdapter=new...)
{
}
这样你就不要管它到底应该close还是disose,反正出了using块,它就会释放掉了

#8


2.关键看可能的最大连接数。
如果只有几个或十几个程序在连数据库,那么不关闭连接也没影响。
如果客户端很多,不仅要用完关闭连接,还有相应调大访问间隔。

#9


大家的解释都很有用,谢谢。

#10


请赐教!!! 请教VB.NET的TIMER控件不停连接MYSQL数据库的问题!

#11


如果只有新增,没有修改
那么你直接去查目标数据库里主键的最大值,拿这个最大值再去源数据库里查,不就直接得到所有新增的记录了,先取出来再对比是要闹哪样?
好比你要跟海贼王的漫画,你先记住上次看到哪了,再上网上看看最新的是不是你看过的,不就得了
难道还先看最近的10期,再回忆你看过没看过?

#12


而如果你要获取所有修改的,那就麻烦了
除非你加个字段,修改的时候顺便修改这个字段
然后你取所有这个字段是"修改过"的数据,取出来之后顺便把它更新回"未修改"

#13


引用 12 楼 Z65443344 的回复:
而如果你要获取所有修改的,那就麻烦了
除非你加个字段,修改的时候顺便修改这个字段
然后你取所有这个字段是"修改过"的数据,取出来之后顺便把它更新回"未修改"

当然这个过程可以用触发器+存储过程来做,而不需要去改写入数据库的软件

#14


有修改可以用TimeStamp字段。
前一次记下最新的TimeStamp值,下次只取大于这个值的记录。

#15


引用 11 楼 Z65443344 的回复:
如果只有新增,没有修改
那么你直接去查目标数据库里主键的最大值,拿这个最大值再去源数据库里查,不就直接得到所有新增的记录了,先取出来再对比是要闹哪样?
好比你要跟海贼王的漫画,你先记住上次看到哪了,再上网上看看最新的是不是你看过的,不就得了
难道还先看最近的10期,再回忆你看过没看过?


哈哈,大师的比喻精确而不失幽默啊!!!赞一个!!!!!!
1.什么是主键最大值?不是主键的值吧?怎么比较?
2.  我的主键值类型是VARCHAR(40),是个字符串,结构是XX yyyy mm dd hh mm ss  (XX是两位特定字符代码,其他的是年年月月日日时时分分秒秒)
3.倒有另一个字段Save_time,是记录的保存时间,类型是TimeStamp,结构是 yyyy mm dd hh mm ss,我可以用这个值比较最新记录撒?我比较的时候肯定是全表检索撒?我全表共3万条记录,不知道效率怎么样?因为这个数据库其他应用也在用,不敢轻易动,索引这些我也不会建,哈哈。

#16


引用 14 楼 Tiger_Zhao 的回复:
有修改可以用TimeStamp字段。
前一次记下最新的TimeStamp值,下次只取大于这个值的记录。

我有一个字段是 timestamp(14)类型的时间戳字段save_time,值 请教VB.NET的TIMER控件不停连接MYSQL数据库的问题!
想用条件:now()-save_time <1小时, 取得最近1小时内新增的条目,但好像不行,是不是now()和save_time类型不同,不能相减?错误结果如下图,timediff 就是相减的结果
请教VB.NET的TIMER控件不停连接MYSQL数据库的问题!

#17


时间戳应该和unix_timestamp()而不是now()比较吧。

#1


能不用轮询就不用轮询。

#2


1:这种设计非常不好,即便一定要这么做,那么timer的事件里先暂停timer,完成后再启用。避免上一次访问还没结束又开始新的访问。同时尽可能在业务许可的范围内,加大间隔时间。
2:要关掉connection

#3


1.谢谢两位的指导,但是我需要尽快的知道目标数据库的表中有没有新增的条目,如果我不用这样不停查询的方式,该有什么方法呢?
2.我现在的TIMER是30秒查询数据库一次,在TIMER中用到的MySqlDataAdapter,DataSet等对象,应该要在timer过程结束后用dispose销毁吧,不然一段时间后不会造成内存溢出???

#4


引用 3 楼 lgk99 的回复:
1.谢谢两位的指导,但是我需要尽快的知道目标数据库的表中有没有新增的条目,如果我不用这样不停查询的方式,该有什么方法呢?
2.我现在的TIMER是30秒查询数据库一次,在TIMER中用到的MySqlDataAdapter,DataSet等对象,应该要在timer过程结束后用dispose销毁吧,不然一段时间后不会造成内存溢出???

DataSet是托管资源,不需要手动释放
数据库连接close就行了,也不需要dispose
你只要保证每次连接完释放,不要把连接池给占满了,不会有大问题

#5


引用 4 楼 Z65443344 的回复:
Quote: 引用 3 楼 lgk99 的回复:

1.谢谢两位的指导,但是我需要尽快的知道目标数据库的表中有没有新增的条目,如果我不用这样不停查询的方式,该有什么方法呢?
2.我现在的TIMER是30秒查询数据库一次,在TIMER中用到的MySqlDataAdapter,DataSet等对象,应该要在timer过程结束后用dispose销毁吧,不然一段时间后不会造成内存溢出???

DataSet是托管资源,不需要手动释放
数据库连接close就行了,也不需要dispose
你只要保证每次连接完释放,不要把连接池给占满了,不会有大问题


感谢大侠相助和解释!!!!!!那MySqlDataAdapter需要DISPOSE吗?

#6


1.肯定会影响
2.肯定要关闭连接。

#7


影响是肯定会影响,但是会产生多大影响,要看你到底去查什么东西
如果你只查主键的最大值,来跟你目前保存的比较,看是否有新纪录,那么影响几乎是微乎其微的,而且你5S连接一次频率也并不算高
千万不要把里面数据都弄出来遍历

MySqlDataAdapter的问题
你可以这样用
using(MySqlDataAdapter=new...)
{
}
这样你就不要管它到底应该close还是disose,反正出了using块,它就会释放掉了

#8


2.关键看可能的最大连接数。
如果只有几个或十几个程序在连数据库,那么不关闭连接也没影响。
如果客户端很多,不仅要用完关闭连接,还有相应调大访问间隔。

#9


大家的解释都很有用,谢谢。

#10


请赐教!!! 请教VB.NET的TIMER控件不停连接MYSQL数据库的问题!

#11


如果只有新增,没有修改
那么你直接去查目标数据库里主键的最大值,拿这个最大值再去源数据库里查,不就直接得到所有新增的记录了,先取出来再对比是要闹哪样?
好比你要跟海贼王的漫画,你先记住上次看到哪了,再上网上看看最新的是不是你看过的,不就得了
难道还先看最近的10期,再回忆你看过没看过?

#12


而如果你要获取所有修改的,那就麻烦了
除非你加个字段,修改的时候顺便修改这个字段
然后你取所有这个字段是"修改过"的数据,取出来之后顺便把它更新回"未修改"

#13


引用 12 楼 Z65443344 的回复:
而如果你要获取所有修改的,那就麻烦了
除非你加个字段,修改的时候顺便修改这个字段
然后你取所有这个字段是"修改过"的数据,取出来之后顺便把它更新回"未修改"

当然这个过程可以用触发器+存储过程来做,而不需要去改写入数据库的软件

#14


有修改可以用TimeStamp字段。
前一次记下最新的TimeStamp值,下次只取大于这个值的记录。

#15


引用 11 楼 Z65443344 的回复:
如果只有新增,没有修改
那么你直接去查目标数据库里主键的最大值,拿这个最大值再去源数据库里查,不就直接得到所有新增的记录了,先取出来再对比是要闹哪样?
好比你要跟海贼王的漫画,你先记住上次看到哪了,再上网上看看最新的是不是你看过的,不就得了
难道还先看最近的10期,再回忆你看过没看过?


哈哈,大师的比喻精确而不失幽默啊!!!赞一个!!!!!!
1.什么是主键最大值?不是主键的值吧?怎么比较?
2.  我的主键值类型是VARCHAR(40),是个字符串,结构是XX yyyy mm dd hh mm ss  (XX是两位特定字符代码,其他的是年年月月日日时时分分秒秒)
3.倒有另一个字段Save_time,是记录的保存时间,类型是TimeStamp,结构是 yyyy mm dd hh mm ss,我可以用这个值比较最新记录撒?我比较的时候肯定是全表检索撒?我全表共3万条记录,不知道效率怎么样?因为这个数据库其他应用也在用,不敢轻易动,索引这些我也不会建,哈哈。

#16


引用 14 楼 Tiger_Zhao 的回复:
有修改可以用TimeStamp字段。
前一次记下最新的TimeStamp值,下次只取大于这个值的记录。

我有一个字段是 timestamp(14)类型的时间戳字段save_time,值 请教VB.NET的TIMER控件不停连接MYSQL数据库的问题!
想用条件:now()-save_time <1小时, 取得最近1小时内新增的条目,但好像不行,是不是now()和save_time类型不同,不能相减?错误结果如下图,timediff 就是相减的结果
请教VB.NET的TIMER控件不停连接MYSQL数据库的问题!

#17


时间戳应该和unix_timestamp()而不是now()比较吧。