65.9K
CodeProject 正在变化。 阅读更多。
Home

Provider Factory

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013 年 10 月 11 日

CPOL

2分钟阅读

viewsIcon

13760

提供程序工厂为我们提供了独立的数据库访问,我们可以连接到任何数据库源(SQLServer、DB2、Oracle、MS-Access)。提供程序

提供程序工厂为我们提供了独立的数据库访问,我们可以连接到任何数据库源(SQLServer、DB2、Oracle、MS-Access)。
提供程序工厂允许程序员编写自己的数据库访问实现。

using System;
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);

© . All rights reserved.