快速业务通道

Discuz!NT中的数据库链接类(重构到抽象类工厂模式)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-11


大家看到这里使用了反射,而BaseConfigs.GetDbType这个属性的调用在一个叫做Dnt.config的文件
中有相应设置,它标识了当前数据库是Sqlserver,Access还是MySql。     那么目前我们假设使用的是SqlServer型的数据库,那么上面的"Discuz.Data.{0}Provider, Discuz.Data.{0}"
就会变成是"Discuz.Data.SqlServerProvider, Discuz.Data.SqlServer",我们不妨在这里找一下Discuz.Data.SqlServer
这个项目中,为方便,我这里直接将Discuz.Data.SqlServer这个类代码贴在这 1  public class SqlServerProvider : IDbProvider
 2     {
 3         public IDbProviderFactory Instance()
 4         {
 5             return SqlClientFactory.Instance;
 6         }
 7
 8         public void DeriveParameters(IDbCommand cmd)
 9         {
10             if ((cmd as SqlCommand) != null)
11             {
12                 SqlCommandBuilder.DeriveParameters(cmd as SqlCommand);
13             }
14         }
15
16         public IDataParameter MakeParam(string ParamName, DbType DbType, Int32 Size)
17         {
18             SqlParameter param;
19
20             if (Size > 0)
21                 param = new SqlParameter(ParamName, (SqlDbType)DbType, Size);
22             else
23                 param = new SqlParameter(ParamName, (SqlDbType)DbType);
24
25             return param;
26         }
27
28  
29
30     }
31
32     //SqlClientFactory工厂类,提供对SqlServerProvider中的Instance返回实例的支持
33     public class SqlClientFactory : IDbProviderFactory
34     {
35         public static readonly SqlClientFactory Instance;
36
37         static SqlClientFactory()
38         {
39             Instance = new SqlClientFactory();
40         }
41
42         private SqlClientFactory()
43         {
44         }
45
46
47         public IDbConnection CreateConnection()
48         {
49             return new SqlConnection();
50         }
51
52        
53         public IDbCommand CreateCommand()
54         {
55             return new SqlCommand();
56         }
57
58         public IDbDataAdapter CreateDataAdapter()
59         {
60             return new SqlDataAdapter();
61         }
62
63     }
64
65
         
    其中SqlClientFactory是一个在.net2.0框架下才有的类,这里因为考虑产品架构在1。0和2。0下的对应关系,这里
使用了相同的类名称。而这里类在抽象类工厂模式中的位置就是ConcreateFactory部分所需要实现的代码。
           
    同理大家可以找到另个两个项目DLL,Discuz.Data.Access中的AccessProvider.cs和Discuz.Data.MySql中的
MySqlProvider.cs,大家会发现类似的代码实现。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号