Provider Factory





0/5 (0投票)
提供程序工厂为我们提供了独立的数据库访问,我们可以连接到任何数据库源(SQLServer、DB2、Oracle、MS-Access)。提供程序
提供程序工厂为我们提供了独立的数据库访问,我们可以连接到任何数据库源(SQLServer、DB2、Oracle、MS-Access)。
提供程序工厂允许程序员编写自己的数据库访问实现。
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
命名空间 DatabaseProvider
{
/// <summary>
///
/// 设计模式:工厂。
/// </summary>
public abstract class Database
{
private string connectionString;
private DbProviderFactory dbProviderFactory;
private string schema;
private string dataProvider;
private bool status;
protected Database() { }
public DbProviderFactory DbProviderFactory
{
get { return dbProviderFactory; }
}
public string ConnectionString
{
get { return connectionString; }
set { connectionString = value; }
}
public string Schema
{
get { return schema; }
}
public string DataProvider
{
get { return dataProvider; }
}
public DbConnection GetConnection()
{
DbConnection newConnection = null;
try
{
try
{
ProviderFactory = DbProviderFactories.GetFactory(this.ProviderType);
dbConnection = ProviderFactory.CreateConnection();
dbConnection.ConnectionString = this.ConnectionString;
}
catch
{
throw;
}
}
catch
{
if (newConnection != null)
newConnection.Close();
throw;
}
return newConnection;
}
public DbCommand CreateCommand()
{
return dbProviderFactory.CreateCommand();
}
public DbCommand CreateCommand(string sQueryString, DbConnection connection)
{
try
{
// 创建 DbCommand。
DbCommand command = this.CreateCommand();
command.CommandText = sQueryString;
command.Connection = connection;
return command;
}
catch
{
throw;
}
}
public DbDataAdapter CreateDataAdapter()
{
return dbProviderFactory.CreateDataAdapter();
}
public DbDataAdapter CreateDataAdapter(string sQueryString, DbConnection connection)
{
try
{
// 创建 DbCommand。
DbCommand command = this.CreateCommand();
command.CommandText = sQueryString;
command.Connection = connection;
// 创建 DbDataAdapter。
DbDataAdapter adapter = this.CreateDataAdapter();
adapter.SelectCommand = command;
return adapter;
}
catch
{
throw;
}
}
private DbCommandBuilder CreateCommandBuilder()
{
return dbProviderFactory.CreateCommandBuilder();
}
public DbCommandBuilder CreateCommandBuilder(DbDataAdapter dbDA)
{
DbCommandBuilder dbCB = this.CreateCommandBuilder();
dbCB.DataAdapter = dbDA;
return dbCB;
}
}
}
web.config
<add key="Connectionstring" value="database=local;user id=sa;pwd=sa;initial catalog=northwind"/>
<add key="SQLProvider" value="System.Data.SqlClient"/>
<add key="OledbProvider" value="System.Data.OleDb"/>
<add key="Db2Provider" value="IBM.Data.DB2"/>
<add key="OracleProvider" value="System.Data.OracleClient"/>
aspx.cs
private Database DB;
private DbDataAdapter SQLDA;
private DbCommandBuilder SQLDB;
private DbConnection Conn;
private DBCommand cmd;
//将连接字符串和提供程序类型传递给以创建数据库连接
DB.Connectionstring=Configuration.ConfigurationManager.AppSettings["Connectionstring"].ToString();
DB.DataProvider=Configuration.ConfigurationManager.AppSettings["SQLProvider"].ToString();
//创建数据库连接
Conn = DB.GetConnection();
Conn.Open();
//创建数据适配器
SQLDA=DB.CreateDataAdapter("select * from emp",Conn);
//创建命令生成器
SQLDB=DB.CreateCommandBuilder(SQLDA);
//创建命令
cmd=DB.CreateCommand("select * from emp",Conn);