c#操作mysql怎样判断连接已经被断开?

prettywolf 2014-11-28 09:09:49
程序运行一夜未操作,早上操作起来时,立即提示软件崩溃,经调试发现,是mysql服务器端超时断开了连接导致。
解决的办法可以把mysql的wait_timeout调大。但是在代码里怎样判断呢?
在执行ExecuteReader前判断
if(conn == null)
connectMysql();
但是调试发现,就算连接断开,conn也不会为空。
该怎样判断呢?
...全文
1419 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
prettywolf 2014-12-08
  • 打赏
  • 举报
回复
引用 15 楼 jaylongli 的回复:
每次打开后就关闭,NET有连接池的概念,你不要关,注意打开关闭就行。 connection记得用全局变量,别在方法中new
如果是在线程中,这样不好吧。
prettywolf 2014-12-02
  • 打赏
  • 举报
回复
引用 9 楼 yangb0803 的回复:
mysql服务器端超时断开了连接 。。。。 看你这说法,你该不会将程序一直连接着MYSQL吧? 用的静态连接,每次只是去增删改查? 每次数据库操作后,就需要马上关闭。。。
明白了,这东西得用连接池,是不是? 我是多线程的,怪不得容易出问题,以前不是提示连接必须被打开,就是reader必须先关闭。 用连接池每次操作数据库后马上关闭,进行压力测试,很正常。
prettywolf 2014-12-02
  • 打赏
  • 举报
回复
的确是,每个reader都有close,但还是阻止不了reader未关闭的错误。
加油馒头 2014-12-02
  • 打赏
  • 举报
回复
每次打开后就关闭,NET有连接池的概念,你不要关,注意打开关闭就行。 connection记得用全局变量,别在方法中new
prettywolf 2014-12-01
  • 打赏
  • 举报
回复
引用 9 楼 yangb0803 的回复:
mysql服务器端超时断开了连接 。。。。 看你这说法,你该不会将程序一直连接着MYSQL吧? 用的静态连接,每次只是去增删改查? 每次数据库操作后,就需要马上关闭。。。
记录消费机传来的消费数据的,每秒最多10条,测试了一下,每次连接数据库的开销较大。 单连接数据库就两三百ms了,忙不过来。
  • 打赏
  • 举报
回复
你可以每一分钟查询一下数据表共有多少表。
smthgdin_020 2014-11-29
  • 打赏
  • 举报
回复
用ConnectionState就可以判断链接的状态。
道玄希言 2014-11-29
  • 打赏
  • 举报
回复
mysql服务器端超时断开了连接 。。。。 看你这说法,你该不会将程序一直连接着MYSQL吧? 用的静态连接,每次只是去增删改查? 每次数据库操作后,就需要马上关闭。。。
by_封爱 版主 2014-11-29
  • 打赏
  • 举报
回复
代码有问题. 正常就是连接 打开 操作 关闭 所以 不存在是否关闭之类的问题.. 所以 从你说的错误来看 你一定连个close都没有...
相思梦 2014-11-29
  • 打赏
  • 举报
回复
Connection.State // 当然你如果无法确定 // 可以这样做 先 Connection.Close() // 这是不会报错的语句 这样你便可以确定是否已经关闭连接 当然你如果绝对还容易报错那么填上 try { } catch { }
於黾 2014-11-28
  • 打赏
  • 举报
回复
如果必须使用长连接,你也可以在sql语句执行不成功的时候重新connect,然后重新执行sql语句 而不是必须去管conn.State到底是什么
於黾 2014-11-28
  • 打赏
  • 举报
回复
不要判断conn == null 它永远也不会变成null的,除非你用代码重新给它赋值 你应该判断conn.State 或者有个简单的办法,不要使用长连接,每次执行SQL语句之前connect,执行完毕后close
忘丿殇 2014-11-28
  • 打赏
  • 举报
回复
判断Conn.State==ConnectionState.Closed
prettywolf 2014-11-28
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
判断它的连接状态呀
string status = conn.State.ToString(); //这里就算连接断了,status还是Open if (conn == null) { Console.WriteLine("Database server is disconnect..."); initMysql(); }
prettywolf 2014-11-28
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
判断它的连接状态呀
试判断了,显示是Open的
exception92 2014-11-28
  • 打赏
  • 举报
回复
判断它的连接状态呀

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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