ADO.NET工厂方法 (DbProviderFactory、SqlClientFactory)

DbProviderFactory
表示一组方法,这些方法用于创建数据源类的提供程序实现的实例。

继承层次结构
System.Object
  System.Data.Common.DbProviderFactory
    System.Data.EntityClient.EntityProviderFactory
    System.Data.Odbc.OdbcFactory
    System.Data.OleDb.OleDbFactory
    System.Data.OracleClient.OracleClientFactory
    System.Data.SqlClient.SqlClientFactory

public abstract class DbProviderFactory

 

SqlClientFactory
表示一组方法用于创建实例 System.Data.SqlClient 的数据源类的提供程序的实现。

继承层次结构
System.Object
  System.Data.Common.DbProviderFactory
    System.Data.SqlClient.SqlClientFactory

public sealed class SqlClientFactory : DbProviderFactory, IServiceProvider

 

源代码:

namespace System.Data.Common
{
    /// <summary>
    /// 表示一组方法,这些方法用于创建数据源类的提供程序实现的实例。
    /// </summary>
    public abstract class DbProviderFactory // V1.2.3300
    {
        protected DbProviderFactory()
        {
        }

        virtual public bool CanCreateDataSourceEnumerator
        {
            get
            {
                return false;
            }
        }

        /// <summary>
        /// 返回实现 DbCommand 类的提供程序类的一个新实例
        /// </summary>
        public virtual DbCommand CreateCommand()
        {
            return null;
        }

        /// <summary>
        /// 返回实现 DbConnection 类的提供程序类的一个新实例
        /// </summary>
        public virtual DbConnection CreateConnection()
        {
            return null;
        }

        /// <summary>
        /// 返回实现 DbDataAdapter 类的提供程序类的一个新实例
        /// </summary>
        public virtual DbDataAdapter CreateDataAdapter()
        {
            return null;
        }

        /// <summary>
        /// 返回实现 DbParameter 类的提供程序类的一个新实例
        /// </summary>
        public virtual DbParameter CreateParameter()
        {
            return null;
        }


        public virtual DbCommandBuilder CreateCommandBuilder()
        {
            return null;
        }

        public virtual DbConnectionStringBuilder CreateConnectionStringBuilder()
        {
            return null;
        }

        public virtual CodeAccessPermission CreatePermission(PermissionState state)
        {
            return null;
        }

        public virtual DbDataSourceEnumerator CreateDataSourceEnumerator()
        {
            return null;
        }
    }
}

 

namespace System.Data.SqlClient
{
    /// <summary>
    /// 表示一组方法用于创建实例 System.Data.SqlClient 的数据源类的提供程序的实现。
    /// </summary>
    public sealed class SqlClientFactory : DbProviderFactory, IServiceProvider
    {

        public static readonly SqlClientFactory Instance = new SqlClientFactory();

        private SqlClientFactory()
        {
        }

        public override bool CanCreateDataSourceEnumerator
        {
            get
            {
                return true;
            }
        }

        /// <summary>
        /// 返回一个强类型 DbCommand 实例
        /// </summary>
        public override DbCommand CreateCommand()
        {
            return new SqlCommand();
        }

        /// <summary>
        /// 返回一个强类型 DbConnection 实例
        /// </summary>
        public override DbConnection CreateConnection()
        {
            return new SqlConnection();
        }

        /// <summary>
        /// 返回一个强类型 DbDataAdapter 实例
        /// </summary>
        public override DbDataAdapter CreateDataAdapter()
        {
            return new SqlDataAdapter();
        }

        /// <summary>
        /// 返回一个强类型 DbParameter 实例
        /// </summary>
        public override DbParameter CreateParameter()
        {
            return new SqlParameter();
        }


        public override DbCommandBuilder CreateCommandBuilder()
        {
            return new SqlCommandBuilder();
        }

        public override DbConnectionStringBuilder CreateConnectionStringBuilder()
        {
            return new SqlConnectionStringBuilder();
        }

        public override CodeAccessPermission CreatePermission(PermissionState state)
        {
            return new SqlClientPermission(state);
        }

        public override DbDataSourceEnumerator CreateDataSourceEnumerator()
        {
            return SqlDataSourceEnumerator.Instance;
        }


        object IServiceProvider.GetService(Type serviceType)
        {
            object result = null;
            if (serviceType == GreenMethods.SystemDataCommonDbProviderServices_Type)
            {
                result = GreenMethods.SystemDataSqlClientSqlProviderServices_Instance();
            }
            return result;
        }
    }
}

 

posted @ 2016-12-26 22:02  茗::流  阅读(557)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。