解决方案 »

  1.   

    请看ExecuteReader方法类的注释. 啊.. 我真是无解了.      我感觉和这个mysqlhelp 类没有什么关系啊. using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Web;
    using MySql.Data.MySqlClient;
    using System.Data;
    using System.Configuration;
    namespace V5Shop.Data
    {
        public class MySqlDBHelp
        {
            private static MySqlConnection _connection;
            /// <summary>
            /// 获取数据库连接桥
            /// </summary>
            private static MySqlConnection Connection
            {
                get
                {
                    string connectionString = ConfigurationManager.AppSettings["MYSQLConnString"];
                    if (_connection == null)
                    {
                        _connection = new MySqlConnection(connectionString);
                        _connection.Open();
                    }
                    if (_connection.State == ConnectionState.Closed)
                    {
                        _connection.Open();
                    }
                    if (_connection.State == ConnectionState.Broken)
                    {
                        _connection.Close();
                        _connection.Open();
                    }
                    return _connection;
                }        }        #region 数据获取和执行类
            /// <summary>
            /// 获取表数据
            /// </summary>
            /// <param name="sql"></param>
            /// <returns></returns>
            public static MySqlDataReader GetDataRead(string sql)
            {
                MySqlCommand command = new MySqlCommand(sql, Connection);
                using (MySqlDataReader read = command.ExecuteReader())
                {
                    return read;
                }
            }
            public static int ExecuteNonQuery(string sql)
            {
                MySqlCommand command = new MySqlCommand(sql, Connection);
                int row = command.ExecuteNonQuery();
                return row;
            }
            //public static DataTable ExecuteDataTable(string sql)
            //{        //    MySqlCommand command = new MySqlCommand(sql, Connection);        //    DataTable dt = new DataTable();
            //    try
            //    {
            //        MySqlDataAdapter sda = new MySqlDataAdapter(command);
            //        sda.Fill(dt);
            //    }
            //    catch (Exception)
            //    {        //        throw;
            //    }        //    return dt;
            //}
            public static DataTable ExecuteDataTable(string sql)
            {
                string connString = ConfigurationManager.AppSettings["MYSQLConnString"];
                DataSet ds = ExecuteDataSet(connString,CommandType.Text,sql);
                return ds.Tables[0];
            }        /// <summary>
            /// 执行sql语句,返回一行一列。。
            /// </summary>
            /// <param name="sql">SQL语句</param>
            /// <returns></returns>
            public static string GetScalar(string sql)
            {
                MySqlCommand command = new MySqlCommand(sql, Connection);
                return command.ExecuteScalar().ToString();
            }        #endregion
            #region 事务操作
            /// <summary>
            /// 用提供的函数,执行SQL命令,返回一个从指定连接的数据库记录集
            /// </summary>
            /// <param name="connectionString">SqlConnection有效的SQL连接字符串</param>
            /// <param name="commandType">CommandType:CommandType.Text、CommandType.StoredProcedure</param>
            /// <param name="commandText">SQL语句或存储过程</param>
            /// <param name="commandParameters">SqlParameter[]参数数组</param>
            /// <returns>SqlDataReader:执行结果的记录集</returns>
            public static MySqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms)
            {
                MySqlCommand cmd = new MySqlCommand();
                MySqlConnection conn = new MySqlConnection(connString);            // 我们在这里用 try/catch 是因为如果这个方法抛出异常,我们目的是关闭数据库连接,再抛出异常,
                // 因为这时不会有DataReader存在,此后commandBehaviour.CloseConnection将不会工作。
                try
                {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
                   // 这里已经using 可是人家说就是这里未关闭.  请问到底怎么释放.  
                    using (MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        cmd.Parameters.Clear();
                        return rdr;
                    }
                }
                catch
                {
                    conn.Close();
                    throw;
                }
            }        /// <summary>
            /// 用提供的函数,执行SQL命令,返回一个从指定连接的数据库记录集
            /// </summary>
            /// <param name="connectionString">SqlConnection有效的SQL连接字符串</param>
            /// <param name="commandType">CommandType:CommandType.Text、CommandType.StoredProcedure</param>
            /// <param name="commandText">SQL语句或存储过程</param>
            /// <returns>SqlDataReader:执行结果的记录集</returns>
            public static MySqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText)
            {
                return ExecuteReader(connString, cmdType, cmdText, (MySqlParameter[])null);
            }        /// <summary>
            /// 用提供的方法,执行带参数的SQL命令,返回值为该命令所影响的行数
            /// </summary>
            /// <param name="connString">SqlConnection有效的SQL连接字符串</param>
            /// <param name="cmdType">CommandType:CommandType.Text、CommandType.StoredProcedure</param>
            /// <param name="cmdText">SQL语句或存储过程</param>
            /// <param name="cmdParameters">SQL语句所带的参数集</param>
            /// <returns>int:该命令所影响的行数</returns>
            public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParameters)
            {            MySqlCommand cmd = new MySqlCommand();            using (MySqlConnection conn = new MySqlConnection(connString))
                {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParameters);
                    int val = cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
                    return val;
                }
            }
            /// <summary>
            /// 用提供的方法,执行SQL命令,返回值为该命令所影响的行数
            /// </summary>
            /// <param name="connString">SqlConnection有效的SQL连接字符串</param>
            /// <param name="cmdType">CommandType:CommandType.Text、CommandType.StoredProcedure</param>
            /// <param name="cmdText">SQL语句或存储过程</param>
            /// <returns>int:该命令所影响的行数</returns>
            public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText)
            {
                return ExecuteNonQuery(connString, cmdType, cmdText, (MySqlParameter[])null);
            }
            /// <summary>
            /// 用提供的方法,执行带参数的SQL命令,返回值为结果集中第一行的第一列或空引用(如果结果集为空)。
            /// </summary>
            /// <param name="connString">SqlConnection有效的SQL连接字符串</param>
            /// <param name="cmdType">CommandType:CommandType.Text、CommandType.StoredProcedure</param>
            /// <param name="cmdText">SQL语句或存储过程</param>
            /// <param name="cmdParameters">SQL语句所带的参数集</param>
            /// <returns></returns>
            public static string ExecuteScalar(string connString, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParameters)
            {
                MySqlCommand cmd = new MySqlCommand();
                using (MySqlConnection conn = new MySqlConnection(connString))
                {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParameters);
                    return cmd.ExecuteScalar().ToString();
                }        }
            /// <summary>
            /// 用提供的方法,执行SQL命令,返回值为结果集中第一行的第一列或空引用(如果结果集为空)。
            /// </summary>
            /// <param name="connString">SqlConnection有效的SQL连接字符串</param>
            /// <param name="cmdType">CommandType:CommandType.Text、CommandType.StoredProcedure</param>
            /// <param name="cmdText">SQL语句或存储过程</param>
            /// <returns></returns>
            public static string ExecuteScalar(string connString, CommandType cmdType, string cmdText)
            {
                return ExecuteScalar(connString, cmdType, cmdText, (MySqlParameter[])null);
            }        public static DataSet ExecuteDataSet(string connString, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParameters)
            {
                MySqlCommand cmd = new MySqlCommand();            using (MySqlConnection conn = new MySqlConnection(connString))
                {                PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParameters);
                    MySqlDataAdapter ada = new MySqlDataAdapter(cmd);
                    DataSet ds = new DataSet();
                    ada.Fill(ds);
                    cmd.Parameters.Clear();
                    return ds;
                }
            }
            /// <summary>
            /// 用提供的方法,执行SQL命令,返回值为DataSet数据集
            /// </summary>
            /// <param name="connString">SqlConnection有效的SQL连接字符串</param>
            /// <param name="cmdType">CommandType:CommandType.Text、CommandType.StoredProcedure</param>
            /// <param name="cmdText">SQL语句或存储过程</param>
            /// <returns>Datat:该命令的结果集</returns>
            public static DataSet ExecuteDataSet(string connString, CommandType cmdType, string cmdText)
            {
                return ExecuteDataSet(connString, cmdType, cmdText, (MySqlParameter[])null);
            }
            public static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms)
            {            if (conn.State != ConnectionState.Open)
                    conn.Open();            cmd.Connection = conn;
                cmd.CommandText = cmdText;            if (trans != null)
                    cmd.Transaction = trans;            cmd.CommandType = cmdType;            if (cmdParms != null)
                {
                    foreach (MySqlParameter parm in cmdParms)
                        cmd.Parameters.Add(parm);
                }
            }        #endregion
        }
    }