首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET Framework >

问一个DbProviderFactory的有关问题

2012-03-06 
问一个DbProviderFactory的问题请问使用DbProviderFactorydbfactoryDbProviderFactories.GetFactory( Sy

问一个DbProviderFactory的问题
请问
使用
DbProviderFactory   dbfactory   =   DbProviderFactories.GetFactory( "System.Data.SqlClent ");
DbDataAdapter   dbDataAdapter   =   dbfactory.CreateDataAdapter();
跟使用
DbDataAdapter   dbDataAdapter   =   new   SqlDataAdapter();
这两者有什么区别吗?

为什么还要多一个   DbProviderFactory   工厂
我直接指定一个枚举
        public   enum   DbType
        {
                SqlServer,
                Oledb,
                Oracle,
                Odbc
        }
然后写方法
                public   static   DbDataAdapter   GetDataAdapter(DbType   dbType)
                {
                        DbDataAdapter   Ada;

                        switch   (dbType)
                        {
                                case   DbType.SqlServer:
                                        Ada   =   new   SqlDataAdapter();
                                        break;
                                case   DbType.Oracle:
                                        Ada   =   new   OracleDataAdapter();
                                        break;
                                case   DbType.Oledb:
                                default:
                                        Ada   =   new   OleDbDataAdapter();
                                        break;
                                case   DbType.Odbc:

                                        Ada   =   new   OdbcDataAdapter();
                                        break;
                        }
                        return   Ada;


                }
然后这么做
DbDataAdapter   dbDataAdapter   =   GetDataAdapter(DbType.SqlServer)

这样不是也能完成
DbProviderFactory的功能吗?



[解决办法]
当你有新的Database类加入的时候,不用再重新修改你的枚举,重新编译.
DbProviderFactory dbfactory = DbProviderFactories.GetFactory( "System.Data.SqlClent ");是通过类型名称反射生成连接类型.可以支持以后的数据库类型扩展
[解决办法]
1,修改枚举并不影响以后数据库的添加和已有代码的兼容
=========================================================
你需要重新发布,如果客户想在你的产品上进行二次开发,不能使用你的接口,做不到他的要求

2,反射在性能上有一定损失
============================================================
这是一种权衡,损失1秒钟,但是对你扩展性,维护性带来的收益会远远大于这1秒
3,在一些地方使用DbProviderFactory 好像无法实现
=================================================================
DbProviderFactory 是抽象类,里面的方法需要你去重写

另外,我建议你看看设计模式,可能就理解他的作用了.

热点排行