情人节的晚上思绪万千,想到了曾经的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

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

  1. 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现按部门组织机构设置权限...

    政府性质的单位里很少有人员流动,一般对系统的权限要求都是相对固定一些,所以有时候会有对系统按所在部门进行配置的需求,而且很有说服力,我们通用权限管理系统组件里也同样可以权限按所在部门设置.可以灵活满足 ...

  2. 通用权限管理系统组件 (GPM - General Permissions Manager) 中后一个登录的把前一个登录的踢掉功能的实现...

    最近客户有需要,同一个帐户可以重复登录系统,但是后登录的账户需要把前面已经登录的账户踢掉,例如客户把电脑打开在别的电脑上然后换一个房间,或者换个办公楼想登录时就会遇到很多麻烦,遇到郁闷的情况就是死活无 ...

  3. 通用权限管理系统组件 (GPM - General Permissions Manager) 中及时通讯功能的改进

    以前的通用权限管理系统的及时通讯只能按组织机构展示用户列表结构,现在不仅仅可以按组织机构展示,还可以按系统应用角色分组,用户自己的个性化通讯录分组进行展示用户数据了,用起来也应该更符合大家的习惯了. ...

  4. 通用权限管理系统组件 (GPM - General Permissions Manager) 中集成多系统的统一登录(数据库源码级)附源码...

    眼前有20万行以上的代码时很多人都会眼花缭乱,不知道从哪里开始下手了,甚至不会去研究几下就直接放弃了.其实大多时候没有想象的那么复杂,代码里一大部分都是有重复的,有本质上差别的部分还是很少的. 春节期 ...

  5. 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现系统参数配置保存,附源码...

    其实GPM不仅仅是权限管理系统,其实更是一个灵活的轻量级快速.Net开发架构,他需要最短的学习时间,可以最快速入门,并不是通过玩技术来实现我们的日常需求.GPM中只要写一套代码,就可以实现在多种数据库 ...

  6. 通用权限管理系统组件 (GPM - General Permissions Manager)

    只开发一套业务管理系统,或者只维护一套业务管理系统是相对简单的事情,但是你要同时给多个客户开发多套系统,或者同时维护多个公司提供的多套系统时烦恼就来了,我们通用权限管理系统里有比较好的实现方式,有可以 ...

  7. 通用权限管理系统组件 (GPM - General Permissions Manager) 给信息管理系统加一个初始化的功能,调用存储过程...

    系统初始化的运行效果如下: 参数表是为了防止反复被初始化的,防止关键数据丢失. 其实很多人都提过希望有系统初始化的功能,最近稍微空一些,就给系统增加了一个初始化的功能,给大家参考一下. 首先写了一个存 ...

  8. 通用权限管理系统组件 (GPM - General Permissions Manager) - 支持请求

    为什么80%的码农都做不了架构师?>>>    首先感谢您支持关注通用权限管理系统组件,若有什么我们可以帮助您的,可以在下面留言发表您的建议,我们会尽快与您联系. 转载于:https ...

  9. 通用权限管理系统组件 (GPM - General Permissions Manager) 不改数据库、甚至不写代码就集成铜墙铁壁权限管理组件...

    为什么80%的码农都做不了架构师?>>>    越成熟的东西,越牛X的东西,越简单才对,简单才是硬道理,苹果的手机只有少数几个按键,苹果Ipad也很少的按钮,甚至连苹果的笔记本键盘都 ...

  10. 通用权限管理系统组件 (GPM - General Permissions Manager) 在跨国直销企业电子商务项目中的成功应用...

    我所在是一家跨国家直销公司,在亚太某国家电子商务项目中,2011年底系统全面应用了通用权限数据访问层类库及工具类库,支持了每月万级会员加入.千万级订单:同时,在我们的项目开发过程中,完全由外包工程师来 ...

最新文章

  1. 基于ZIGBEE通信的功率电子负载
  2. oracle客户端免安装配置、64位机器PL/SQL和VS自带的IIS连接问题
  3. Javascript基本概念之数据类型
  4. AnotherRedisDesktopManager下载地址
  5. JAVA和C++内部类
  6. java 心跳程序_Java实现心跳机制的方法
  7. 电子科技大学计算机课程表,电子科技大学课表.doc
  8. 【图像处理】canny和sobel边缘检测__python-opencv
  9. 我的家庭私有云计划-19
  10. DevChartControl的颜色配置
  11. 腾讯云安装宝塔面板详细教程
  12. LinuxQt打包发布
  13. 流量宝流量真实有效吗?实测刷流量百度和CNZZ哪个更精准
  14. 《诗经》那么美,读不懂多浪费|爬取一本好好学习,准备做一个“有文化”的程序人
  15. linux远程 p2p下载,在linux as3中利用iptables+ipp2p限制bt、eMule等下载
  16. Tribal项目介绍
  17. 内外网ping SNAT DNAT
  18. 给新人文案的一些建议
  19. maven 使用记录
  20. 计算机专业这么多课程怎么学?

热门文章

  1. 教学思路SQL之入门习题《学员成绩》 二、基础单表查询
  2. 某高手毕生精力总结的电脑技巧
  3. Spark 的 python 编程环境
  4. 2018.12.2 中国石油大学第一次新生训练赛题解
  5. 截取 %# Eval(val) %中的字符
  6. 一段JS代码实现光标定位输入框文字最后
  7. 清华计算机系女生每天看这些公众号
  8. 虚拟机连不上网 Xshell连不上虚拟机
  9. Spring Security学习
  10. pyqt5 登录跳转