情人节的晚上思绪万千,想到了曾经的N次恋爱,想到现在生活,想到曾经的奋斗,想到曾经在身边的女人,人生不易终于失眠了,上一篇我们介绍了 两者的区别就是一个是 static 的方法,另外一个是通过接口的方式实现的,接着我们介绍更加灵活的,动态数据库5种实用方法,与上一篇的数据库访问组件结合实用会更加强大一些,真正功能强大的是没任何封装的ADO.NET,其实自己封装的往往都是有些娱乐精神的人干出来的事情。
当然这些数据库访问组件都是可以单独使用的,可以与通用权限管理系统组件无任何关联。通用权限的很多实现理念就是无关性,通用权限与数据库访问组件是无关的,数据库库访问组件就可以单独用,甚至没任何无用的代码,配置在里面。
我们直接看代码如下:
// ----------------------------------------------------------------- // All Rights Reserved , Copyright (C) 2012 , Hairihan TECH, Ltd. // ----------------------------------------------------------------- using System; using System.Data; using System.Collections.Generic; using DotNet.Utilities; using DotNet.Business; /// <summary> /// DbTools2 /// 静态数据库访问的方法程序 /// /// 修改纪录 /// /// 2012-02-15 版本:1.0 JiRiGaLa 整理例子程序功能。 /// /// 版本:1.0 /// /// <author> /// <name> JiRiGaLa </name> /// <date> 2012-02-15 </date> /// </author> /// </summary> public partial class DbTools2 : BasePage { protected void Page_Load( object sender, EventArgs e) { // 动态方法调用数据库的方法 this.DynamicMethod(); // 动态打开数据库的方法 string dbConnection = " Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234; "; // using (IDbHelper dbHelper = DbHelperFactory.GetHelper(CurrentDbType.Oracle)) // using (IDbHelper dbHelper = DbHelperFactory.GetHelper(CurrentDbType.MySql)) // using (IDbHelper dbHelper = DbHelperFactory.GetHelper(CurrentDbType.DB2)) // using (IDbHelper dbHelper = DbHelperFactory.GetHelper(CurrentDbType.Access)) // using (IDbHelper dbHelper = DbHelperFactory.GetHelper(CurrentDbType.SQLite)) using (IDbHelper dbHelper = DbHelperFactory.GetHelper(CurrentDbType.SqlServer)) { dbHelper.Open(dbConnection); } } private void DynamicMethod() { this.Fill(); this.ExecuteNonQuery(); this.ExecuteScalar(); this.ExecuteReader(); } /// <summary> /// Fill /// 动态方法调用数据库的方法,能有效控制数据库的开关次数 /// </summary> private void Fill() { string dbConnection = " Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234; "; // DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.DB2Helper(dbConnection); // DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.MySqlHelper(dbConnection); // DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.OleDbHelper(dbConnection); // DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.OracleHelper(dbConnection); // DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.SqLiteHelper(dbConnection); DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.SqlHelper(dbConnection); dbHelper.Open(); // 1:直接执行 string commandText = @" SELECT * FROM BASE_USER WHERE DELETIONSTATECODE = 0 "; DataTable dataTable = dbHelper.Fill(commandText); // 2:防注入的安全的参数化运行方式执行查询 commandText = @" SELECT * FROM BASE_USER WHERE CODE = " + dbHelper.GetParameter( " Code ") + " AND DELETIONSTATECODE = " + dbHelper.GetParameter( " DeletionStateCode "); // 这里是生成安全参数的方法 List<IDbDataParameter> dbParameters = new List<IDbDataParameter>(); dbParameters.Add(dbHelper.MakeParameter( " Code ", " jirigala ")); dbParameters.Add(dbHelper.MakeParameter( " DeletionStateCode ", 0)); dataTable = dbHelper.Fill(commandText, dbParameters.ToArray()); // 3:执行存储过程,假设也是需要传递这2个参数,类似功能的一个存储过程 // 我们不建议用存储过程,因为会对系统移植,多数据库设计等上会遇到很多麻烦 commandText = " GET_USER "; dataTable = dbHelper.Fill(commandText, dbParameters.ToArray(), CommandType.StoredProcedure); dbHelper.Close(); } /// <summary> /// ExecuteNonQuery /// 静态方法调用数据库的方法,调用事物的方式 /// </summary> /// <returns> 影响行数 </returns> private int ExecuteNonQuery() { int returnValue = 0; string dbConnection = " Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234; "; DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.SqlHelper(dbConnection); try { dbHelper.Open(); dbHelper.BeginTransaction(); // 1:直接执行 string commandText = @" UPDATE BASE_USER SET DELETIONSTATECODE = 0 "; returnValue = dbHelper.ExecuteNonQuery(commandText); // 2:防注入的安全的参数化运行方式执行查询 commandText = @" UPDATE BASE_USER SET DELETIONSTATECODE = 0 WHERE CODE = " + DotNet.Utilities.DbHelper.GetParameter( " Code ") + " AND DELETIONSTATECODE = " + DotNet.Utilities.DbHelper.GetParameter( " DeletionStateCode "); // 这里是生成安全参数的方法 List<IDbDataParameter> dbParameters = new List<IDbDataParameter>(); dbParameters.Add(dbHelper.MakeParameter( " Code ", " jirigala ")); dbParameters.Add(dbHelper.MakeParameter( " DeletionStateCode ", 0)); returnValue = dbHelper.ExecuteNonQuery(commandText, dbParameters.ToArray()); // 3:执行存储过程,假设也是需要传递这2个参数,类似功能的一个存储过程 // 我们不建议用存储过程,因为会对系统移植,多数据库设计等上会遇到很多麻烦 commandText = " UPDATE_USER "; returnValue = dbHelper.ExecuteNonQuery(commandText, dbParameters.ToArray(), CommandType.StoredProcedure); dbHelper.CommitTransaction(); } catch (Exception ex) { dbHelper.RollbackTransaction(); BaseExceptionManager.LogException(dbHelper, this.UserInfo, ex); throw ex; } finally { dbHelper.Close(); } return returnValue; } /// <summary> /// ExecuteScalar /// 动态方法调用数据库的方法, 支持Using的用法 /// </summary> /// <returns> 结果 </returns> private object ExecuteScalar() { object returnValue = null; string dbConnection = " Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234; "; using (DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.SqlHelper(dbConnection)) { // 1:直接执行 string commandText = @" SELECT CODE FROM BASE_USER WHERE DELETIONSTATECODE = 0 "; returnValue = dbHelper.ExecuteScalar(commandText); // 2:防注入的安全的参数化运行方式执行查询 commandText = @" SELECT CODE FROM BASE_USER WHERE CODE = " + dbHelper.GetParameter( " Code ") + " AND DELETIONSTATECODE = " + dbHelper.GetParameter( " DeletionStateCode "); // 这里是生成安全参数的方法 List<IDbDataParameter> dbParameters = new List<IDbDataParameter>(); dbParameters.Add(dbHelper.MakeParameter( " Code ", " jirigala ")); dbParameters.Add(dbHelper.MakeParameter( " DeletionStateCode ", 0)); returnValue = dbHelper.ExecuteScalar(commandText, dbParameters.ToArray()); // 3:执行存储过程,假设也是需要传递这2个参数,类似功能的一个存储过程 // 我们不建议用存储过程,因为会对系统移植,多数据库设计等上会遇到很多麻烦 commandText = " GET_USER "; returnValue = dbHelper.ExecuteScalar(commandText, dbParameters.ToArray(), CommandType.StoredProcedure); } return returnValue; } /// <summary> /// ExecuteReader /// 动态方法调用数据库的方法,每次执行程序会自动打开关闭数据库的例子,自动会多次打开关闭 /// </summary> private void ExecuteReader() { string dbConnection = " Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234; "; DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.SqlHelper(dbConnection); // 1:直接执行 string commandText = @" SELECT * FROM BASE_USER WHERE DELETIONSTATECODE = 0 "; dbHelper.ExecuteReader(commandText); // 2:防注入的安全的参数化运行方式执行查询 commandText = @" SELECT * FROM BASE_USER WHERE CODE = " + dbHelper.GetParameter( " Code ") + " AND DELETIONSTATECODE = " + dbHelper.GetParameter( " DeletionStateCode "); // 这里是生成安全参数的方法 List<IDbDataParameter> dbParameters = new List<IDbDataParameter>(); dbParameters.Add(dbHelper.MakeParameter( " Code ", " jirigala ")); dbParameters.Add(dbHelper.MakeParameter( " DeletionStateCode ", 0)); dbHelper.ExecuteReader(commandText, dbParameters.ToArray()); // 3:执行存储过程,假设也是需要传递这2个参数,类似功能的一个存储过程 // 我们不建议用存储过程,因为会对系统移植,多数据库设计等上会遇到很多麻烦 commandText = " GET_USER "; dbHelper.ExecuteReader(commandText, dbParameters.ToArray(), CommandType.StoredProcedure); } }
例子程序下载地址如下:
.NET 2.0 数据库访问层源码在这里下载: