最近有一個客戶咨詢能否單獨用通用權限管理系統組件中的數據庫訪問組件,回答:“絕對ok”,這個組件是經歷了多年的考驗,是值得信任的一個數據庫訪問組件,正好情人節了,給大家也分享一下,接着在下一個文章里,寫動態的數據庫連接組件的用法。
靜態的數據庫組件的用法是非常簡單的,功能也是相對簡單的,他的特點就是支持多數據庫、函數命名方式等編寫規范,思路嚴謹,可重復利用的價值高,移植性也好,建議初學者多用此數據庫訪問組件會更好一些。
靜態訪問方法里不推薦采用數據庫事務處理等,會在動態訪問組里介紹此功能,還有一些超級復雜的功能,也不建議在自己的封裝的組件里實現,那些超級個性化的的功能直接調用微軟的方法就可以了,根本沒封裝的任意意義,其實封裝太多也是畫蛇添足的事情,沒多大必要,適當的輕量級的封裝就足夠了。
參考的例子代碼如下:
//
-----------------------------------------------------------------
// 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>
/// DbTools
/// 靜態數據庫訪問的方法程序
///
/// 修改紀錄
///
/// 2012-02-14 版本:1.0 JiRiGaLa 整理例子程序功能。
///
/// 版本:1.0
///
/// <author>
/// <name> JiRiGaLa </name>
/// <date> 2012-02-14 </date>
/// </author>
/// </summary>
public partial class DbTools : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e)
{
// 靜態方法調用數據庫的方法
this.StaticMethod();
}
private void StaticMethod()
{
// 設置數據庫連接
DotNet.Utilities.DbHelper.DbConnection = " Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234; ";
// 設置數據庫類型
DotNet.Utilities.DbHelper.DbType = CurrentDbType.SqlServer;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.Oracle;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.MySql;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.DB2;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.Access;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.SQLite;
this.Fill();
this.ExecuteNonQuery();
this.ExecuteScalar();
this.ExecuteReader();
}
/// <summary>
/// Fill
/// 靜態方法調用數據庫的方法
/// </summary>
private void Fill()
{
// 1:直接執行
string commandText = @" SELECT *
FROM BASE_USER
WHERE DeletionStateCode = 0 ";
DataTable dataTable = DotNet.Utilities.DbHelper.Fill(commandText);
// 2:防注入的安全的參數化運行方式執行查詢
commandText = @" SELECT *
FROM BASE_USER
WHERE Code = " + DotNet.Utilities.DbHelper.GetParameter( " Code ")
+ " AND DeletionStateCode = " + DotNet.Utilities.DbHelper.GetParameter( " DeletionStateCode ");
// 這里是生成安全參數的方法
List<IDbDataParameter> dbParameters = new List<IDbDataParameter>();
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " Code ", " jirigala "));
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " DeletionStateCode ", 0));
DotNet.Utilities.DbHelper.Fill(commandText, dbParameters.ToArray());
// 3:執行存儲過程,假設也是需要傳遞這2個參數,類似功能的一個存儲過程
// 我們不建議用存儲過程,因為會對系統移植,多數據庫設計等上會遇到很多麻煩
commandText = " GET_USER ";
dataTable = DotNet.Utilities.DbHelper.Fill(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
}
/// <summary>
/// ExecuteNonQuery
/// 靜態方法調用數據庫的方法
/// </summary>
/// <returns> 影響行數 </returns>
private int ExecuteNonQuery()
{
int returnValue = 0;
// 1:直接執行
string commandText = @" UPDATE BASE_USER
SET DELETIONSTATECODE = 0 ";
returnValue = DotNet.Utilities.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(DotNet.Utilities.DbHelper.MakeParameter( " Code ", " jirigala "));
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " DeletionStateCode ", 0));
returnValue = DotNet.Utilities.DbHelper.ExecuteNonQuery(commandText, dbParameters.ToArray());
// 3:執行存儲過程,假設也是需要傳遞這2個參數,類似功能的一個存儲過程
// 我們不建議用存儲過程,因為會對系統移植,多數據庫設計等上會遇到很多麻煩
commandText = " UPDATE_USER ";
returnValue = DotNet.Utilities.DbHelper.ExecuteNonQuery(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
return returnValue;
}
/// <summary>
/// ExecuteScalar
/// 靜態方法調用數據庫的方法
/// </summary>
/// <returns> 結果 </returns>
private object ExecuteScalar()
{
object returnValue = null;
// 1:直接執行
string commandText = @" SELECT CODE
FROM BASE_USER
WHERE DELETIONSTATECODE = 0 ";
returnValue = DotNet.Utilities.DbHelper.ExecuteScalar(commandText);
// 2:防注入的安全的參數化運行方式執行查詢
commandText = @" SELECT CODE
FROM BASE_USER
WHERE CODE = " + DotNet.Utilities.DbHelper.GetParameter( " Code ")
+ " AND DELETIONSTATECODE = " + DotNet.Utilities.DbHelper.GetParameter( " DeletionStateCode ");
// 這里是生成安全參數的方法
List<IDbDataParameter> dbParameters = new List<IDbDataParameter>();
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " Code ", " jirigala "));
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " DeletionStateCode ", 0));
returnValue = DotNet.Utilities.DbHelper.ExecuteScalar(commandText, dbParameters.ToArray());
// 3:執行存儲過程,假設也是需要傳遞這2個參數,類似功能的一個存儲過程
// 我們不建議用存儲過程,因為會對系統移植,多數據庫設計等上會遇到很多麻煩
commandText = " GET_USER ";
returnValue = DotNet.Utilities.DbHelper.ExecuteScalar(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
return returnValue;
}
/// <summary>
/// ExecuteReader
/// 靜態方法調用數據庫的方法
/// </summary>
private void ExecuteReader()
{
// 1:直接執行
string commandText = @" SELECT *
FROM BASE_USER
WHERE DELETIONSTATECODE = 0 ";
DotNet.Utilities.DbHelper.ExecuteReader(commandText);
// 2:防注入的安全的參數化運行方式執行查詢
commandText = @" SELECT *
FROM BASE_USER
WHERE CODE = " + DotNet.Utilities.DbHelper.GetParameter( " Code ")
+ " AND DELETIONSTATECODE = " + DotNet.Utilities.DbHelper.GetParameter( " DeletionStateCode ");
// 這里是生成安全參數的方法
List<IDbDataParameter> dbParameters = new List<IDbDataParameter>();
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " Code ", " jirigala "));
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " DeletionStateCode ", 0));
DotNet.Utilities.DbHelper.ExecuteReader(commandText, dbParameters.ToArray());
// 3:執行存儲過程,假設也是需要傳遞這2個參數,類似功能的一個存儲過程
// 我們不建議用存儲過程,因為會對系統移植,多數據庫設計等上會遇到很多麻煩
commandText = " GET_USER ";
DotNet.Utilities.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>
/// DbTools
/// 靜態數據庫訪問的方法程序
///
/// 修改紀錄
///
/// 2012-02-14 版本:1.0 JiRiGaLa 整理例子程序功能。
///
/// 版本:1.0
///
/// <author>
/// <name> JiRiGaLa </name>
/// <date> 2012-02-14 </date>
/// </author>
/// </summary>
public partial class DbTools : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e)
{
// 靜態方法調用數據庫的方法
this.StaticMethod();
}
private void StaticMethod()
{
// 設置數據庫連接
DotNet.Utilities.DbHelper.DbConnection = " Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234; ";
// 設置數據庫類型
DotNet.Utilities.DbHelper.DbType = CurrentDbType.SqlServer;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.Oracle;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.MySql;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.DB2;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.Access;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.SQLite;
this.Fill();
this.ExecuteNonQuery();
this.ExecuteScalar();
this.ExecuteReader();
}
/// <summary>
/// Fill
/// 靜態方法調用數據庫的方法
/// </summary>
private void Fill()
{
// 1:直接執行
string commandText = @" SELECT *
FROM BASE_USER
WHERE DeletionStateCode = 0 ";
DataTable dataTable = DotNet.Utilities.DbHelper.Fill(commandText);
// 2:防注入的安全的參數化運行方式執行查詢
commandText = @" SELECT *
FROM BASE_USER
WHERE Code = " + DotNet.Utilities.DbHelper.GetParameter( " Code ")
+ " AND DeletionStateCode = " + DotNet.Utilities.DbHelper.GetParameter( " DeletionStateCode ");
// 這里是生成安全參數的方法
List<IDbDataParameter> dbParameters = new List<IDbDataParameter>();
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " Code ", " jirigala "));
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " DeletionStateCode ", 0));
DotNet.Utilities.DbHelper.Fill(commandText, dbParameters.ToArray());
// 3:執行存儲過程,假設也是需要傳遞這2個參數,類似功能的一個存儲過程
// 我們不建議用存儲過程,因為會對系統移植,多數據庫設計等上會遇到很多麻煩
commandText = " GET_USER ";
dataTable = DotNet.Utilities.DbHelper.Fill(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
}
/// <summary>
/// ExecuteNonQuery
/// 靜態方法調用數據庫的方法
/// </summary>
/// <returns> 影響行數 </returns>
private int ExecuteNonQuery()
{
int returnValue = 0;
// 1:直接執行
string commandText = @" UPDATE BASE_USER
SET DELETIONSTATECODE = 0 ";
returnValue = DotNet.Utilities.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(DotNet.Utilities.DbHelper.MakeParameter( " Code ", " jirigala "));
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " DeletionStateCode ", 0));
returnValue = DotNet.Utilities.DbHelper.ExecuteNonQuery(commandText, dbParameters.ToArray());
// 3:執行存儲過程,假設也是需要傳遞這2個參數,類似功能的一個存儲過程
// 我們不建議用存儲過程,因為會對系統移植,多數據庫設計等上會遇到很多麻煩
commandText = " UPDATE_USER ";
returnValue = DotNet.Utilities.DbHelper.ExecuteNonQuery(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
return returnValue;
}
/// <summary>
/// ExecuteScalar
/// 靜態方法調用數據庫的方法
/// </summary>
/// <returns> 結果 </returns>
private object ExecuteScalar()
{
object returnValue = null;
// 1:直接執行
string commandText = @" SELECT CODE
FROM BASE_USER
WHERE DELETIONSTATECODE = 0 ";
returnValue = DotNet.Utilities.DbHelper.ExecuteScalar(commandText);
// 2:防注入的安全的參數化運行方式執行查詢
commandText = @" SELECT CODE
FROM BASE_USER
WHERE CODE = " + DotNet.Utilities.DbHelper.GetParameter( " Code ")
+ " AND DELETIONSTATECODE = " + DotNet.Utilities.DbHelper.GetParameter( " DeletionStateCode ");
// 這里是生成安全參數的方法
List<IDbDataParameter> dbParameters = new List<IDbDataParameter>();
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " Code ", " jirigala "));
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " DeletionStateCode ", 0));
returnValue = DotNet.Utilities.DbHelper.ExecuteScalar(commandText, dbParameters.ToArray());
// 3:執行存儲過程,假設也是需要傳遞這2個參數,類似功能的一個存儲過程
// 我們不建議用存儲過程,因為會對系統移植,多數據庫設計等上會遇到很多麻煩
commandText = " GET_USER ";
returnValue = DotNet.Utilities.DbHelper.ExecuteScalar(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
return returnValue;
}
/// <summary>
/// ExecuteReader
/// 靜態方法調用數據庫的方法
/// </summary>
private void ExecuteReader()
{
// 1:直接執行
string commandText = @" SELECT *
FROM BASE_USER
WHERE DELETIONSTATECODE = 0 ";
DotNet.Utilities.DbHelper.ExecuteReader(commandText);
// 2:防注入的安全的參數化運行方式執行查詢
commandText = @" SELECT *
FROM BASE_USER
WHERE CODE = " + DotNet.Utilities.DbHelper.GetParameter( " Code ")
+ " AND DELETIONSTATECODE = " + DotNet.Utilities.DbHelper.GetParameter( " DeletionStateCode ");
// 這里是生成安全參數的方法
List<IDbDataParameter> dbParameters = new List<IDbDataParameter>();
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " Code ", " jirigala "));
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter( " DeletionStateCode ", 0));
DotNet.Utilities.DbHelper.ExecuteReader(commandText, dbParameters.ToArray());
// 3:執行存儲過程,假設也是需要傳遞這2個參數,類似功能的一個存儲過程
// 我們不建議用存儲過程,因為會對系統移植,多數據庫設計等上會遇到很多麻煩
commandText = " GET_USER ";
DotNet.Utilities.DbHelper.ExecuteReader(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
}
}
例子程序下載地址如下:
.NET 2.0 數據庫訪問層源碼在這里下載:
/Files/jirigala/DotNet.Utilities.rar