解决方案 »

  1.   

    m_conn = m_connpool.getConnection();
    不要用共用一个connection,用完就释放using(var conn= new MySqlConnection(connectionstring))
    {
    string sql = "select loc from table_ipaddr where id = '" + i + "'";
    ....
    }
      
    *****************************************************************************
    签名档: http://feiyun0112.cnblogs.com/
      

  2.   

    很明显,cmd没有销毁,然后又new了一个,原先的cmd还连接着,果断报错
      

  3.   

    但是我有个问题,cmd我没有销毁,但是如果我只启动一个线程的话一直循环的做数据库操作是没有问题的。但是超过一个线程就不行。
      

  4.   

    不行啊,我加了一句cmd.dispose()还是同样报错!
      

  5.   

    不行啊,我加了一句cmd.dispose()还是同样报错!
    用完close()再dispose()试下
      

  6.   

    不行啊,我加了一句cmd.dispose()还是同样报错!
    用完close()再dispose()试下
    sqlcommand没有close方法啊!
      

  7.   

    不行啊,我加了一句cmd.dispose()还是同样报错!
    用完close()再dispose()试下
    sqlcommand没有close方法啊!
    你是多线程,在你close之前,另一条线程已经在执行cmd了,所以报错。
    用lock锁一下代码,要么就不要共用一个conn。
      

  8.   

    但是我有个问题,cmd我没有销毁,但是如果我只启动一个线程的话一直循环的做数据库操作是没有问题的。但是超过一个线程就不行。
    单线程,是没有问题的。多线程就像我上面说的那样,冲突了。
      

  9.   

    不行啊,我加了一句cmd.dispose()还是同样报错!
    用完close()再dispose()试下
    sqlcommand没有close方法啊!
    你是多线程,在你close之前,另一条线程已经在执行cmd了,所以报错。
    用lock锁一下代码,要么就不要共用一个conn。
    我不是用的一个connection,因为是连接池,所以我得到的不同的connection,连接池的代码您看一下吧
    public class DataBasePool
        {
            private Stack<MySqlConnection> pool;
            private const int POOL_MAX_SIZE = 20;
            private int current_Size = 0;
            private string ConnString = "";//连接字符串 
            private const string SYS_PROPERTY = "config\\SysProperty.xml";        private static DataBasePool connPool;        private DataBasePool()
            {
                if (pool == null)
                {
                    pool = new Stack<MySqlConnection>();
                }
            }        [MethodImpl(MethodImplOptions.Synchronized)]
            public static DataBasePool getInstance()
            {
                if (connPool == null)
                {
                    connPool = new DataBasePool();
                }
                return connPool;
            }        public MySqlConnection getConnection()
            {
                MySqlConnection conn;
                lock (this)
                {
                    if (pool.Count == 0)
                    {
                        if (current_Size < POOL_MAX_SIZE)
                        {
                            conn = createConnection();
                            current_Size++;
                            //把conn加入到pool 中                        pool.Push(conn);
                        }
                        else
                        {
                            try
                            {
                                Monitor.Wait(this);
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine(e.Message);
                            }
                        }
                    }
                    conn = (MySqlConnection)pool.Pop();
                }
                return conn;
            }        private string GetConnString()
            {
                if (ConnString == "")
                {
                    ConnString = "Data Source=127.0.0.1;"
                    + "Port=3308;"
                    + "User ID=root;"
                    + "Password=123456;"
                    + "Initial Catalog=testdb;"
                    + "Pooling=true;"
                    + "CharSet=utf8;";
                }
                return ConnString;
            }        public void releaseConnection(MySqlConnection conn)
            {
                lock (this)
                {
                    pool.Push(conn);
                    Monitor.Pulse(this);
                }
            }        private MySqlConnection createConnection()
            {
                lock (this)
                {
                    MySqlConnection newConn = new MySqlConnection(GetConnString());
                    newConn.Open();
                    return newConn;
                }
            }
        }