none
[急]数据库连接问题 RRS feed

  • 问题

  • 数据库连接操作类中一个方法如下:

        #region ExcuteNonQuery 本方法用于执行delete,insert,update三种类型的sql操作。返回值为受影响的记录数量

        //执行无返回数据的操作,参数sql是要执行的sql语句。
        //本方法用于执行delete,insert,update三种类型的sql操作。返回值为受影响的记录数量
        public static int ExecuteNonQuery(string sql)
        {
            try
            {
                //创建command对象
                cmd = new MySqlCommand();
                cmd.CommandText = sql;
                cmd.Connection = connection;

                cmd.CommandTimeout = 60;
                //打开数据库
                cmd.Connection.Open();

                //执行无数据返回的数据库操作,返回受影响的记录数量
                return cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                //return -1;
                throw new Exception(ex.Message);
            }
            finally
            {
                //关闭数据库
                cmd.Connection.Close();
            }
        }

        #endregion



    问题是:
        由于这个方法在同一页面中运用非常多次(判断用),有时候正常,但是如果操作速度快一点(登录框登录判断,随便输入数据登录)
    就会出现错误---"数据库还为打开的状态",但有时候又没问题

    请问该如何解决这个问题?

    2009年3月9日 14:30

答案

全部回复

  • connection作为类成员,在类实例化的时候就打开,不要在ExecuteNonQuery里打开。

    如果Connection是静态成员,则不要在ExecuteNonQuery里执行  cmd.Connection.Close();
    孟宪会
    2009年3月10日 0:52
    版主
  •      public static int ExecuteNonQuery(string sql)
        {
            using (MySqlConnection conn = new MySqlConnection(connectionString))
            {
                using (MySqlCommand cmd = new MySqlCommand(sql, conn))
                {
                    try
                    {
                        conn.Open();
                        return cmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }
        }

    改成这样,好像就没出问题了...什么意思?
    2009年3月11日 2:41
  • http://msdn.microsoft.com/zh-cn/library/yh598w02.aspx

    using 语句

    孟宪会
    2009年3月11日 2:48
    版主