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++)); } }