1、IAdoNetBuilder.cs
-------------------------
using System;
namespace GeneralForums.Web
{
///
/// 幫助建立各種 ADO.NET 對象的處理器。
///
public interface IAdoNetBuilder
{
///
/// 建立到數據存儲的連接。
///
/// 返回已經創建的 System.Data.IDbConnection 對象引用。
System.Data.IDbConnection CreateConnection();
///
/// 創建一個 System.Data.IDbDataAdapter。
///
/// 返回已經創建的 System.Data.IDbDataAdapter 對象引用。
System.Data.IDbDataAdapter CreateDataAdapter();
}
}
2、SqlBuilder.cs
-------------------------
using System;
namespace GeneralForums.Web
{
///
/// 定義基于 MS SQL Server 的 IAdoNetBuilder 的一個實現。
///
public class SqlBuilder : IAdoNetBuilder
{
///
/// 配置文件中用于對連接字符串進行索引的鍵值。
///
public static string ConnectionStringKey = "__SqlBuilder_ConnectionString";
///
/// 初始化 SqlBuilder 類的新實例。
///
public SqlBuilder()
{
}
///
/// 返回數據庫連接串。
///
///
public static string ConnectionString()
{
return System.Configuration.ConfigurationSettings.AppSettings[ConnectionStringKey];
}
#region IAdoNetBuilder 成員
///
/// 建立到MS SQL Server 數據庫的連接。
///
/// 返回已經創建的 System.Data.IDbConnection 對象引用。
/// 從當前配置文件(.config)中獲取連接信息(索引鍵值為“__SqlBuilder_ConnectionString”),
并建立相應的連接。配置文件中的連接信息是明文的,沒有經過任何加密,為了保證數據庫的安全,
應該考慮對 SqlCreator 提供集成的數據庫驗證。
public System.Data.IDbConnection CreateConnection()
{
return new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationSettings.AppSettings[ConnectionStringKey]);
}
///
/// 創建一個 System.Data.IDbDataAdapter。
///
/// 返回已經創建的 System.Data.IDbDataAdapter 對象引用。
public System.Data.IDbDataAdapter CreateDataAdapter()
{
return new System.Data.SqlClient.SqlDataAdapter();
}
#endregion
}
}
3、AdoNetHelper.cs
-------------------------
using System;
namespace GeneralForums.Web
{
///
/// 為加載當前的 IAdoNetBuilder 提供方法。不能繼承該類。
///
public sealed class AdoNetHelper
{
private AdoNetHelper()
{
}
private static IAdoNetBuilder _builder = null;
///
/// 配置文件中表示當前正在使用的 IAdoNetBuilder 的配置鍵值。
///
public static string AdoNetBuilderKey = "__AdoNetBuilder__";
///
/// 獲取由當前配置確定的 IAdoNetBuilder 對象引用。
///
public static IAdoNetBuilder AdoNetBuilder
{
get
{
if(_builder == null)
{
string v = System.Configuration.ConfigurationSettings.AppSettings[AdoNetBuilderKey];
if(v == null || v.Trim() == "")
{
_builder = new SqlBuilder();
}
else
{
string [] vv = v.Split(’,’);
if(vv.Length < 2)
throw new ArgumentException("提供的數據操作配置項目的信息不夠完整。");
string aname = vv[0].ToLower().Trim();
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
if(aname != System.IO.Path.GetFileName(assembly.Location).ToLower())
{
assembly = System.Reflection.Assembly.LoadFrom(vv[0]);
}
_builder = (IAdoNetBuilder)assembly.CreateInstance(vv[1]);
}
}
return _builder;
}
}
///
/// 執行指定的數據操作。
///
/// 進行數據庫操作的 SQL 語句。
/// 返回操作影響的數據庫的行數。
public static int Execute(string sql)
{
if(sql == null || sql.Trim() == "")
throw new ArgumentNullException("sql", "無效的數據操作語句。");
System.Data.IDbConnection conn = AdoNetBuilder.CreateConnection();
conn.Open();
try
{
System.Data.IDbCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
return cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
}
///
/// 從當前數據源中獲取一個單一的值。
///
/// 進行數據操作使用的 SQL 語句。
/// 返回已經獲取的值,如果沒有相應的值,則可能返回空引用。
public static object QueryScalar(string sql)
{
if(sql == null || sql.Trim() == "")
throw new ArgumentNullException("sql", "無效的數據操作語句。");
System.Data.IDbConnection conn = AdoNetBuilder.CreateConnection();
conn.Open();
try
{
System.Data.IDbCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
return cmd.ExecuteScalar();
}
finally
{
conn.Close();
}
}
///
/// 從當前數據源中獲取一個記錄行。
///
/// 進行數據庫操作使用的 SQL 語句,如果語句包含一個記錄集,則只返回記錄集中的第一個記錄行。
/// 返回已經獲取的行的值,該行中的所有的值以字典的形式保存。如果沒有相應的行,則返回的字典的長度為 0。
/// 如果數據庫中的值為空值,則返回的字典中的相應值為空引用。
public static System.Collections.IDictionary QueryRow(string sql)
{
if(sql == null || sql.Trim() == "")
throw new ArgumentNullException("sql", "無效的數據操作語句。");
System.Data.IDbConnection conn = AdoNetBuilder.CreateConnection();
conn.Open();
try
{
System.Data.IDbCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
System.Data.IDataReader reader = null;
try
{
reader = cmd.ExecuteReader();
if(reader.Read())
{
int count = reader.FieldCount;
System.Collections.Specialized.HybridDictionary d = new System.Collections.Specialized.HybridDictionary(count);
for(int i = 0; i < count; i ++)
{
d.Add(reader.GetName(i), reader.IsDBNull(i) ? null : reader.GetValue(i));
}
return d;
}
else
{
return new System.Collections.Specialized.HybridDictionary(1);
}
}
finally
{
if(reader != null && !reader.IsClosed)
reader.Close();
}
}
finally
{
conn.Close();
}
}
///
/// 從當前的數據源中加載一個行集。
///
/// 進行數據庫操作使用的 SQL 語句。
/// 返回 System.Data.DataSet ,該集合中包含了所有的符合條件的行集。
public static System.Data.DataSet QueryRows(string sql)
{
if(sql == null || sql.Trim() == "")
throw new ArgumentNullException("sql", "無效的數據操作語句。");
System.Data.IDbConnection conn = AdoNetBuilder.CreateConnection();
conn.Open();
try
{
System.Data.IDbCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
System.Data.IDbDataAdapter adapter = AdoNetBuilder.CreateDataAdapter();
System.Data.DataSet dataset = new System.Data.DataSet();
adapter.SelectCommand = cmd;
adapter.Fill(dataset);
return dataset;
}
finally
{
conn.Close();
}
}
}
}
=========