通用許可權管理系統元件(GPM-GeneralPermissionsManager)中靈活經典的.NET2.0資料庫訪問元件,附原始碼

技術小阿哥發表於2017-11-27

  情人節的晚上思緒萬千,想到了曾經的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>
publicpartialclass DbTools2 : BasePage

{
protectedvoid 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);

       }

   }

privatevoid DynamicMethod()

   {
this.Fill();
this.ExecuteNonQuery();
this.ExecuteScalar();
this.ExecuteReader();

   }


///<summary>
/// Fill
/// 動態方法呼叫資料庫的方法,能有效控制資料庫的開關次數
///</summary>
privatevoid 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(Codejirigala));

       dbParameters.Add(dbHelper.MakeParameter(DeletionStateCode0));

       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>
privateint 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(Codejirigala));

           dbParameters.Add(dbHelper.MakeParameter(DeletionStateCode0));

           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>
privateobject 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(Codejirigala));

           dbParameters.Add(dbHelper.MakeParameter(DeletionStateCode0));

           returnValue = dbHelper.ExecuteScalar(commandText, dbParameters.ToArray());

// 3:執行儲存過程,假設也是需要傳遞這2個引數,類似功能的一個儲存過程
//    我們不建議用儲存過程,因為會對系統移植,多資料庫設計等上會遇到很多麻煩
           commandText = GET_USER;

           returnValue = dbHelper.ExecuteScalar(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);

       }

return returnValue;

   }


///<summary>
/// ExecuteReader
/// 動態方法呼叫資料庫的方法,每次執行程式會自動開啟關閉資料庫的例子,自動會多次開啟關閉
///</summary>
privatevoid 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(Codejirigala));

       dbParameters.Add(dbHelper.MakeParameter(DeletionStateCode0));

       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,如需轉載請自行聯絡原作者


相關文章