Sqlhelper

本文介绍了一个用于简化MySQL数据库操作的C#助手类。该类提供连接管理、执行增删改查等基本功能,并通过示例展示了如何使用这些方法进行数据库交互。
class MysqlHelper : IDBHelper
    {
        /// <summary>
        /// 连接字符串
        /// </summary>
        private string connString;

        /// <summary>
        /// 数据库连接对象
        /// </summary>
        private MySqlConnection conn;

        /// <summary>
        /// MySqlDataReader
        /// </summary>
        private MySqlDataReader reader;

        private MySqlCommand command;

        /// <summary>
        /// 初始化
        /// </summary>
        public MysqlHelper()
        {
            this.connString = InitConnString();//初始化连接字符串
        }

        /// <summary>
        /// 获取数据库连接
        /// </summary>
        /// <returns></returns>
        public void GetConn()
        {
            MySqlConnection conn = null;
            try
            {
                //判断连接字符串时候已经准备好
                if (this.connString.Length == 0)
                {
                    this.InitConnString();
                }
                this.conn = new MySqlConnection(this.connString);
                this.conn.Open();
            }
            catch (MySqlException ex)
            {
                throw ex;
            }
        }


        /// <summary>
        /// 初始化连接字符串
        /// </summary>
        /// <returns></returns>
        public string InitConnString()
        {
            string connString = "";
            connString += "server=" + ConfigurationManager.AppSettings.Get("ip");
            connString += ";uid=" + ConfigurationManager.AppSettings.Get("user");
            connString += ";pwd=" + ConfigurationManager.AppSettings.Get("pwd");
            connString += ";database=" + ConfigurationManager.AppSettings.Get("database");
            connString += ";CharSet=" + ConfigurationManager.AppSettings.Get("encoding");
            return connString;
        }

        /// <summary>
        /// 执行插入操作
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="placeHolders">占位符集合</param>
        /// <param name="param">代替占位符的数据(顺序须和占位符顺序一致)</param>
        /// <param name="returnFieldName">返回列名</param>
        /// <returns>插入后的主键ID值</returns>
        public int ExcuteInsert(string sql, string[] placeHolders, object[] param, string returnFieldName)
        {
            int returnInt = 0;

            try
            {
                command = new MySqlCommand(sql, conn);

                int paramsNum = placeHolders.Count();

                for (int i = 0; i < paramsNum; i++)
                {
                    command.Parameters.AddWithValue(placeHolders[i], param[i]);
                }

                if (reader != null)
                {
                    reader.Close();
                }
                reader = command.ExecuteReader();

                while (reader.Read())
                {
                    returnInt = reader.GetInt32(returnFieldName);
                }
            }
            catch (Exception ex)
            {
                throw new MysqlException(ex.Message, ex);
            }

            return returnInt;
        }

        /// <summary>
        /// 执行更新删除操作
        /// </summary>
        /// <param name="sql">sql语句</param>
        /// <param name="placeHolders">占位符数组</param>
        /// <param name="param">占位符对应的值数组(顺序要一致)</param>
        /// <returns>影响的行数</returns>
        public int ExcuteUpdte(string sql, string[] placeHolders, object[] param)
        {
            int ret = 0;

            try
            {
                if (reader != null)
                {
                    reader.Close();
                }
                command = new MySqlCommand(sql, conn);
                int paramsNum = placeHolders.Count();

                for (int i = 0; i < paramsNum; i++)
                {
                    command.Parameters.AddWithValue(placeHolders[i], param[i]);
                }

                ret = command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new MysqlException(ex.Message, ex);
            }

            return ret;
        }

        /// <summary>
        /// 执行查询语句
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="placeHolders">占位符数组</param>
        /// <param name="param">占位符对应的值数组(顺序要一致)</param>
        /// <returns><code>MySqlDataReader</code></returns>
        public MySqlDataReader excuteQuery(string sql, string[] placeHolders, object[] param)
        {
            try
            {
                command = new MySqlCommand(sql, conn);
                int paramsNum = placeHolders.Count();

                for (int i = 0; i < paramsNum; i++)
                {
                    command.Parameters.AddWithValue(placeHolders[i], param[i]);
                }

                if (reader != null)
                {
                    reader.Close();
                }
                reader = command.ExecuteReader();
            }
            catch (Exception ex)
            {
                throw new MysqlException(ex.Message, ex);
            }

            return reader;
        }

        /// <summary>
        /// 关闭数据库连接
        /// </summary>
        public void Close()
        {
            if (this.reader != null && (!this.reader.IsClosed))
            {
                reader.Close();
            }
            if (this.conn != null)
            {
                this.conn.Close();
            }
        }
    }




调用:public class Template
    {
        private IDBHelper dbHelper = DBFactory.GetDbHelper();//数据库帮助类


        /// <summary>
        /// 列表查询,返回对应实体对象的列表
        /// </summary>
        /// <param name="sql">sql语句</param>
        /// <param name="mapping">实体映射</param>
        /// <param name="placeHolders">占位符数组</param>
        /// <param name="param">占位符对应的值数组</param>
        /// <returns>对应实体的列表</returns>
        public IList<object> ListQuery(string sql, IEntityMapping mapping, string[] placeHolders, object[] param)
        {
            IList<object> retList = new List<object>();
            MySqlDataReader reader = null;


            try
            {
                dbHelper.GetConn();
                reader = dbHelper.excuteQuery(sql, placeHolders, param);
                while (reader.Read())
                {
                    retList.Add(mapping.mapping(reader));
                }
            }
            catch (Exception ex)
            {
                throw new MysqlException(ex.Message, ex);
            }
            finally
            {
                dbHelper.Close();
            }


            return retList;
        }


        /// <summary>
        /// 获取单个实体对象
        /// </summary>
        /// <param name="sql">sql语句</param>
        /// <param name="mapping">实体映射</param>
        /// <param name="placeHolders">占位符数组</param>
        /// <param name="param">占位符对应的值数组</param>
        /// <returns>对应实体的列表</returns>
        public object objectQuery(string sql, IEntityMapping mapping, string[] placeHolders, object[] param)
        {
            try
            {
                IList<object> objectList = ListQuery(sql, mapping, placeHolders, param);
                if (objectList.Count == 1)
                {
                    return objectList[0];
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                throw new MysqlException(ex.Message, ex);
            }
            finally
            {
                dbHelper.Close();
            }
        }


        /// <summary>
        /// 插入数据
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="mapping">实体映射</param>
        /// <param name="placeHolders">占位符数组</param>
        /// <param name="param">占位符对应的值数组</param>
        /// <param name="returnFieldName">返回列名</param>
        /// <returns>插入成功后生成的主键ID</returns>
        public int Insert(string sql, IEntityMapping mapping, string[] placeHolders, object[] param, string returnFieldName)
        {
            int retInt = 0;


            try
            {
                dbHelper.GetConn();
                retInt = dbHelper.ExcuteInsert(sql, placeHolders, param, returnFieldName);
            }
            catch (Exception ex)
            {
                throw new MysqlException(ex.Message, ex);
            }
            finally
            {
                dbHelper.Close();
            }


            return retInt;
        }


        /// <summary>
        /// 执行更新操作
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="mapping">实体映射</param>
        /// <param name="placeHolders">占位符数组</param>
        /// <param name="param">占位符对应的值数组</param>
        /// <returns>影响的行数</returns>
        public int update(string sql, IEntityMapping mapping, string[] placeHolders, object[] param)
        {
            int retInt = 0;


            try
            {
                dbHelper.GetConn();
                retInt = dbHelper.ExcuteUpdte(sql, placeHolders, param);
            }
            catch (Exception ex)
            {
                throw new MysqlException(ex.Message, ex);
            }
            finally
            {
                dbHelper.Close();
            }


            return retInt;
        }
    }

mapping例子:

/// <summary>
    /// 入口地址参数映射实现
    /// </summary>
    public class EntryAddrParamsMapping : IEntityMapping
    {
        public object mapping(MySqlDataReader reader)
        {
            int i = 0;
            return new EntryUrlParams(reader.GetInt32(i++), reader.GetInt32(i++), 
                reader.GetInt32(i++), reader.GetInt32(i++), reader.GetFloat(i++));
        }
    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值