通用权限管理系统组件 (GPM - General Permissions Manager) 中灵活经典的.NET2.0数据库访问组件,附源码

简介:

  情人节的晚上思绪万千,想到了曾经的N次恋爱,想到现在生活,想到曾经的奋斗,想到曾经在身边的女人,人生不易终于失眠了,上一篇我们介绍了 通用权限管理系统组件 (GPM - General Permissions Manager) 中超级经典的.NET2.0静态数据库访问组件 两者的区别就是一个是 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);
   }
}


  例子程序下载地址如下:

/Files/jirigala/CRM.rar

  .NET 2.0 数据库访问层源码在这里下载:

/Files/jirigala/DotNet.Utilities.rar





本文转自 jirigala 51CTO博客,原文链接:http://blog.51cto.com/2347979/1196327,如需转载请自行联系原作者
相关文章
|
1月前
|
开发框架 .NET BI
ASP.NET公立医院健康体检信息管理系统源码
健康体检信息管理系统是专门针对医院体检中心的日常业务运作的特点和流程,结合数字化医院建设要求进行设计研发的一套应用系统。该系统覆盖体检中心的所有业务,完成从预约、登记、收费、检查、检验、出报告、分析、报表等所有工作,规范了体检流程,提高了工作效率。体检系统为每个体检者建立一套完整的体检档案,与病人的门诊、住院诊疗信息有机集成, 真正体现数字化医院以病人为中心的建设原则。
27 1
|
17天前
|
存储 开发框架 前端开发
前端框架EXT.NET Dotnet 3.5开发的实验室信息管理系统(LIMS)成品源码 B/S架构
发展历史:实验室信息管理系统(LIMS),就是指通过计算机网络技术对实验的各种信息进行管理的计算机软、硬件系统。也就是将计算机网络技术与现代的管理思想有机结合,利用数据处理技术、海量数据存储技术、宽带传输网络技术、自动化仪器分析技术,来对实验室的信息管理和质量控制等进行全方位管理的计算机软、硬件系统,以满足实验室管理上的各种目标(计划、控制、执行)。
16 1
|
1月前
|
搜索推荐 API C#
.NET开源快速、强大、免费的电子表格组件
.NET开源快速、强大、免费的电子表格组件
|
9天前
|
PHP 数据库
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务-2
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务
|
9天前
|
存储 PHP Apache
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务-1
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务
|
14天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
21 0
|
23天前
|
SQL JavaScript API
❤Nodejs 第四章(操作本地数据库实现删除-源码地址已开放)
【4月更文挑战第4天】❤Nodejs 第四章(操作本地数据库实现删除-源码地址已开放)在Node.js中实现删除本地数据库记录的操作。首先尝试通过SQL删除ID为8的用户,然后编写`app.delete`路由处理程序,从请求体获取ID并执行删除。。最终成功删除用户并展示了数据库的更新结果。下一节将优化增删改查功能。
28 1
|
24天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
22 0
|
28天前
|
JavaScript Java 测试技术
基于Java的《数据库系统原理》课程平台的设计与实现(源码+lw+部署文档+讲解等)
基于Java的《数据库系统原理》课程平台的设计与实现(源码+lw+部署文档+讲解等)
23 2
|
8天前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)