string status = conn.State.ToString();
//这里就算连接断了,status还是Open
            if (conn == null)
            {
                Console.WriteLine("Database server is disconnect...");
                initMysql();
            }

解决方案 »

  1.   

    判断Conn.State==ConnectionState.Closed
      

  2.   

    不要判断conn == null
    它永远也不会变成null的,除非你用代码重新给它赋值
    你应该判断conn.State或者有个简单的办法,不要使用长连接,每次执行SQL语句之前connect,执行完毕后close
      

  3.   

    如果必须使用长连接,你也可以在sql语句执行不成功的时候重新connect,然后重新执行sql语句
    而不是必须去管conn.State到底是什么
      

  4.   

    Connection.State
    // 当然你如果无法确定
    // 可以这样做 先Connection.Close() // 这是不会报错的语句
    这样你便可以确定是否已经关闭连接当然你如果绝对还容易报错那么填上
    try
    {
    }
    catch
    {
    }
      

  5.   

    代码有问题.正常就是连接 打开 操作 关闭 所以 不存在是否关闭之类的问题..所以 从你说的错误来看 你一定连个close都没有...
      

  6.   

    mysql服务器端超时断开了连接

    看你这说法,你该不会将程序一直连接着MYSQL吧? 
    用的静态连接,每次只是去增删改查?每次数据库操作后,就需要马上关闭
      

  7.   

    用ConnectionState就可以判断链接的状态。
      

  8.   


    明白了,这东西得用连接池,是不是?
    我是多线程的,怪不得容易出问题,以前不是提示连接必须被打开,就是reader必须先关闭。
    用连接池每次操作数据库后马上关闭,进行压力测试,很正常。
      

  9.   

    的确是,每个reader都有close,但还是阻止不了reader未关闭的错误。
      

  10.   

    每次打开后就关闭,NET有连接池的概念,你不要关,注意打开关闭就行。
    connection记得用全局变量,别在方法中new