1.直接黏貼代碼
public sealed class DaoHelper {
private static DataTable _providers = null;
private DbProviderFactory _pf = null;
/// <summary>
/// 靜態(tài)構(gòu)造函數(shù),初始化數(shù)據(jù)提供程序列表。
/// </summary>
static DaoHelper() {
_providers = DbProviderFactories.GetFactoryClasses();
}
/// <summary>
/// 初始化 DAOHelper 類的新實(shí)例。
/// </summary>
public DaoHelper() {
}
/// <summary>
/// 用指定的數(shù)據(jù)提供程序名稱,初始化 DAOHelper 類的新實(shí)例。
/// </summary>
/// <param name="providerName">數(shù)據(jù)提供程序名稱。</param>
public DaoHelper(string providerName) {
this.ProviderName = providerName;
}
private string m_providerName = "";
/// <summary>
/// 獲取或設(shè)置數(shù)據(jù)提供程序名稱。
/// </summary>
public string ProviderName {
get { return m_providerName; }
set {
if(string.IsNullOrEmpty(value)){
throw new ArgumentNullException("value");
}
if(m_providerName != value) {
ChangeProvider(value);
}
}
}
/// <summary>
/// 查找指定數(shù)名稱的據(jù)提供程序行。
/// </summary>
/// <param name="providerInvariantName">數(shù)據(jù)提供程序名稱。</param>
/// <returns></returns>
private DataRow FindProviderRow(string providerInvariantName) {
if(_providers != null) {
return _providers.Rows.Find(providerInvariantName);
}
throw new ProvidersNotFoundException();
}
/// <summary>
/// 根據(jù)參數(shù)提供的數(shù)據(jù)提供程序名稱,更改當(dāng)前的數(shù)據(jù)提供程序工廠。
/// </summary>
/// <param name="providerName">數(shù)據(jù)提供程序名稱。</param>
private void ChangeProvider(string providerName) {
if(string.IsNullOrEmpty(providerName)) {
throw new ArgumentNullException("value");
}
DataRow providerRow = FindProviderRow(providerName);
if(providerRow == null){
throw new ProviderNotFoundException(providerName);
}
_pf = DbProviderFactories.GetFactory(providerRow);
m_providerName = providerName;
}
/// <summary>
/// 創(chuàng)建數(shù)據(jù)源枚舉器。
/// </summary>
/// <returns>返回創(chuàng)建成功的數(shù)據(jù)源枚舉器。</returns>
public DbDataSourceEnumerator CreateDataSourceEnumerator() {
if(_pf == null) {
throw new ProviderFactoryNullException();
}
return _pf.CreateDataSourceEnumerator();
}
/// <summary>
/// 創(chuàng)建數(shù)據(jù)庫(kù)連接。
/// </summary>
/// <returns>返回成功創(chuàng)建的連接對(duì)象。</returns>
public DbConnection CreateConnection() {
if(_pf == null) {
throw new ProviderFactoryNullException();
}
return _pf.CreateConnection();
}
/// <summary>
/// 創(chuàng)建數(shù)據(jù)庫(kù)連接,并用指定的數(shù)據(jù)庫(kù)連接字符串打開(kāi)。
/// </summary>
/// <param name="connectionString">數(shù)據(jù)庫(kù)連接字符串。</param>
/// <returns>返回成功創(chuàng)建并打開(kāi)的連接對(duì)象。</returns>
public DbConnection CreateConnection(string connectionString){
DbConnection result = CreateConnection();
result.ConnectionString = connectionString;
result.Open();
return result;
}
/// <summary>
/// 創(chuàng)建數(shù)據(jù)庫(kù)連接字符串生成器。
/// </summary>
/// <returns>返回成功創(chuàng)建的連接對(duì)象。</returns>
public DbConnectionStringBuilder CreateConnectionStringBuilder() {
if(_pf == null) {
throw new ProviderFactoryNullException();
}
return _pf.CreateConnectionStringBuilder();
}
/// <summary>
/// 創(chuàng)建數(shù)據(jù)適配器。
/// </summary>
/// <returns></returns>
public DataAdapter CreateAdapter() {
if(_pf == null) {
throw new ProviderFactoryNullException();
}
return _pf.CreateDataAdapter();
}
}