文章写后放在网上,需要查询资料的可以扫一眼,若能有参考价值,别忘记留言!项目中的源码位置如图:
1:支持多种数据库。
//----------------------------------------------------------------- // All Rights Reserved , Copyright (C) 2012 , Hairihan TECH, Ltd. //----------------------------------------------------------------- namespace DotNet.Utilities { /// <summary> /// CurrentDbType /// 有关数据库连接类型定义。 /// /// 修改纪录 /// /// 2011.02.22 版本:3.1 JiRiGaLa 转移文件位置,还是不换为好。 /// 2007.04.14 版本:3.0 JiRiGaLa 检查程序格式通过,不再进行修改主键操作。 /// 2006.11.17 版本:2.1 JiRiGaLa 变量命规范化。 /// 2006.04.18 版本:2.0 JiRiGaLa 重新调整主键的规范化。 /// /// 版本:3.1 /// /// <author> /// <name>JiRiGaLa</name> /// <date>2011.02.22</date> /// </author> /// </summary> public enum CurrentDbType { /// <summary> /// 数据库类型:Oracle /// </summary> Oracle, /// <summary> /// 数据库类型:SqlServer /// </summary> SqlServer, /// <summary> /// 数据库类型:Access /// </summary> Access, /// <summary> /// 数据库类型:DB2 /// </summary> DB2, /// <summary> /// 数据库类型:MySql /// </summary> MySql, /// <summary> /// 数据库类型:SQLite /// </summary> SQLite, /// <summary> /// 数据库类型:Ase /// </summary> Ase, /// <summary> /// 数据库类型:PostgreSql /// </summary> PostgreSql } }
2:写法统一,写一套代码跑多个数据库。
3:支持数据库事务回滚。
4:长期在优化维护。
//-------------------------------------------------------------------- // All Rights Reserved , Copyright (C) 2011 , Hairihan TECH, Ltd. //-------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Configuration; using System.Data; namespace DotNet.WebForm.Example { using DotNet.Business; using DotNet.Utilities; /// <remarks> /// ExampleDbHelper /// /// 修改纪录 /// /// 版本:3.0 2013.02.01 JiRiGaLa 写个比较完善的例子程序。 /// 版本:2.0 2011.02.20 JiRiGaLa 整理完善例子程序。 /// 版本:1.0 2009.12.17 JiRiGaLa 创建。 /// /// 版本:1.0 /// <author> /// <name>JiRiGaLa</name> /// <date>2013.02.01</date> /// </author> /// </remarks> public partial class ExampleDbHelper : System.Web.UI.Page { /// <summary> /// 一、静态数据库访问组件、快速执行某个SQL语句,自动打开关闭数据,自动读取配置文件。 /// 这里连接了那个数据库,哪个类型的数据库,连接串等是通过配置文件里配置。 /// 程序启动时,通过Global文件里代码读取到了静态全局变量的。 /// BaseSystemInfo.BusinessDbConnection // 业务数据库。 /// BaseSystemInfo.DataBaseType // 有关数据库连接类型定义。 /// 可以连续执行任意多个SQL语句,当然可以带参数方式的,运行存储过程等等,都应该有相应的函数。 /// /// 优点: /// 不需要自己 Open Close 数据库了,调用比较简便 /// </summary> private void DbHelperStatic() { // 这个辅助工具类能自动连接到 配置文件的 BusinessDbConnection 上 DbHelper.ExecuteNonQuery("SELECT COUNT(1) FROM BaseUser"); DbHelper.ExecuteNonQuery("SELECT COUNT(1) FROM BaseUser"); DbHelper.Fill("SELECT Id FROM BaseUser"); DbHelper.Fill("SELECT Id FROM BaseUser"); // 执行参数化的例子,网站防注入攻击的 IDbDataParameter[] dbParameters = new IDbDataParameter[] { DbHelper.MakeParameter("Id", 5) }; string commandText = "SELECT Id FROM BaseUser WHERE Id > " + DbHelper.GetParameter("Id"); DbHelper.Fill(commandText, dbParameters, CommandType.Text); DbHelper.ExecuteScalar("SELECT COUNT(1) FROM BaseUser"); DbHelper.ExecuteScalar("SELECT COUNT(1) FROM BaseUser"); // 这里需要验证的是能自动关闭数据库连接 IDataReader dataReader1 = DbHelper.ExecuteReader("SELECT Id FROM BaseUser"); while (dataReader1.Read()) { } dataReader1.Close(); IDataReader dataReader2 = DbHelper.ExecuteReader("SELECT Id FROM BaseUser"); while (dataReader2.Read()) { } dataReader2.Close(); // 下面这个是自己可以控制的运行方式,用程序方式设置数据库连接字符串 // 从通用权限管理系统的全局文件读取数据库配置 DbHelper.DbConnection = BaseSystemInfo.BusinessDbConnection; // 设置数据库类型 DbHelper.DbType = CurrentDbType.SqlServer; BaseSystemInfo.BusinessDbConnection = "Data Source=JIRIGALA-PC\\SQLEXPRESS;Initial Catalog=ConvenienceServices;Integrated Security=SSPI;"; DbHelper.DbConnection = "Data Source=localhost;Initial Catalog=UserCenterV37;User Id = sa ; Password = Password@sa;"; // 用读取配置文件的方式设置数据库连接串 DbHelper.DbConnection = ConfigurationManager.AppSettings["BusinessDbConnection"]; DbHelper.Fill("SELECT Id FROM BaseUser"); // 获取数据库当前时间 this.Title = DbHelper.ExecuteScalar("SELECT " + DbHelper.GetDBNow()).ToString(); this.Title = DbHelper.GetDBDateTime(); } /// <summary> /// 数据库事务回滚的例子 /// /// 二、需要支持数据库事务的例子,单个数据的事务应该是建立在一个数据库连接打开与关闭之间, /// 不可能在多个打开关闭之间进行事务控制的。 /// 所以多个SQL语句的执行时的数据库打开关闭是自己控制的,当然有更灵活的需要,可以直接用微软的底层的方法。 /// 通常的业务处理过程中,用这样的方法,工作效率会更高一些。 /// </summary> private void DbHelperTransaction() { IDbHelper dbHelper = new SqlHelper(ConfigurationManager.AppSettings["BusinessDbConnection"]); try { dbHelper.Open(); dbHelper.BeginTransaction(); dbHelper.ExecuteNonQuery("UPDATE BaseUser SET CreateOn = GETDATE()"); dbHelper.ExecuteNonQuery("UPDATE BaseUser SET ModifiedOn = GETDATE()"); // 这里会出错,需要数据库的更新都能回滚才可以 dbHelper.ExecuteNonQuery("UPDATE BaseUser SET SortCode = 'abc'"); dbHelper.CommitTransaction(); } catch (System.Exception exception) { dbHelper.RollbackTransaction(); // throw exception; } finally { dbHelper.Close(); } } /// <summary> /// 调用储存过程的 /// </summary> private void DbHelperStoredProcedure() { DbHelper.Fill("ExportData", new IDbDataParameter[] { DbHelper.MakeParameter("tableName", "BaseUser") }, CommandType.StoredProcedure); } /// <summary> /// 执行数据库脚本 /// </summary> private void ExecuteSql() { // 通过接口定义,打开一个数据库 IDbHelper dbHelper = new SqlHelper(); // 按指定的数据库连接串,打开数据库连接 dbHelper.Open("Data Source=localhost;Initial Catalog=UserCenterV37;User Id = sa ; Password = Password@sa;"); this.ExecuteSql(dbHelper); // 关闭数据库连接 dbHelper.Close(); } /// <summary> /// 执行SQL语句,按接口的方式不指定特定数据库的方式写程序 /// </summary> /// <param name="dbHelper">数据库连接</param> private void ExecuteSql(IDbHelper dbHelper) { string[] values = new string[] { "10000000", "10000900", "10000904" }; List<KeyValuePair<string, object>> parameters = new List<KeyValuePair<string, object>>(); parameters.Add(new KeyValuePair<string, object>(BaseUserEntity.FieldId, values)); parameters.Add(new KeyValuePair<string, object>(BaseUserEntity.FieldDeletionStateCode, 0)); BaseUserManager manager = new BaseUserManager(dbHelper); // 这个是用管理器进行 自动的SQL语句转换的例子 DataTable dataTable = manager.GetDataTable(parameters); this.Title = dataTable.Rows.Count.ToString(); } protected void Page_Load(object sender, EventArgs e) { // 静态调用数据库的方法 DbHelperStatic(); // 数据库事务回滚的例子 DbHelperTransaction(); // 调用储存过程的 DbHelperStoredProcedure(); // 执行脚本 this.ExecuteSql(); } } }