通用許可權管理系統元件(GPM-GeneralPermissionsManager)中靈活經典的.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>
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(“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>
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(“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>
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(“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>
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(“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);
}
}
// 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(“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>
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(“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>
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(“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>
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(“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 資料庫訪問層原始碼在這裡下載:
/Files/jirigala/DotNet.Utilities.rar
本文轉自 jirigala 51CTO部落格,原文連結:http://blog.51cto.com/2347979/1196327,如需轉載請自行聯絡原作者
相關文章
- 通用許可權管理系統元件(GPM-GeneralPermissionsManager)中超級經典的元件
- 使用者許可權設計(三)——通用資料許可權管理系統設計
- MySQL資料庫許可權體系入門(5)---管理資料庫許可權MySql資料庫
- 資料庫的許可權管理資料庫
- DBA 日常:規模使用者資料庫訪問許可權管理資料庫訪問許可權
- 通用許可權系統介紹
- SpringSecurity許可權管理系統實戰—九、資料許可權的配置SpringGse
- 基於SSM框架的JavaWeb通用許可權管理系統SSM框架JavaWeb
- xp系統資料夾訪問許可權設定修改方法訪問許可權
- 寫一個通用資料訪問元件 (轉)元件
- DRF內建許可權元件之自定義許可權管理類元件
- 訪問許可權控制系統|全方位認識 mysql 系統庫訪問許可權MySql
- 訪問管理系統--研究許可權一起來看看
- MySQL資料庫許可權體系入門(4)---管理全域性許可權MySql資料庫
- Oracle資料庫的系統和物件許可權Oracle資料庫物件
- 系統許可權資料庫設計方案資料庫
- 許可權系統:一文搞懂功能許可權、資料許可權
- 資料庫學習:許可權管理資料庫
- MySQL資料庫許可權體系入門(3)---管理使用者許可權MySql資料庫
- ylbtech-許可權管理-資料庫設計-功能許可權管理技術資料庫
- Mysql資料庫許可權問題MySql資料庫
- Ubuntu共享資料夾訪問許可權問題Ubuntu訪問許可權
- 從0到1搭建許可權管理系統系列四 .net8 中Autofac的使用(附原始碼)原始碼
- 【JavaWeb】許可權管理系統JavaWeb
- java的訪問許可權Java訪問許可權
- 如何設計應用系統的資料許可權管理
- 透過shell得到資料庫中許可權的指令碼資料庫指令碼
- 通過shell得到資料庫中許可權的指令碼資料庫指令碼
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- 谷歌VirusTotal開源元件曝高危漏洞,可獲取內網訪問許可權谷歌Rust元件內網訪問許可權
- 惠普監控元件被爆LPE,可使用系統許可權元件
- 深入討論通用許可權元件的理論和設計實現。元件
- 企業許可權管理系統
- Winner許可權管理系統3.0
- MySQL資料庫許可權體系入門(6)---管理表、列及程式相關許可權MySql資料庫
- 瀚高資料庫企業版中的許可權問題資料庫
- Hyperf 使用 hyperf-permission 元件實現許可權管理元件
- PostgreSQL資料庫使用者許可權管理SQL資料庫