C#工厂模式的实现

上午看到一个兄弟的文章,很辛苦的想实现不改代码只改配置来访问不同类型的数据库,自己去实现C#工厂模式。精神可嘉,但是殊不知C#已经自己为不同类型数据库的访问做了一个工厂。在这里我就把使用工厂的例子贴出来供不知道的兄弟参考一下,高手们可以忽略了。

博望网站建设公司成都创新互联公司,博望网站设计制作,有大型网站制作公司丰富经验。已为博望上1000家提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的博望做网站的公司定做!

首先是配置文件:其中的providerName就是指定的不同数据库类型

 
 
 
  1. <addnameaddname="..."connectionString="..."providerName="System.Data.OleDb"/>
  2. <addnameaddname="..."connectionString="..."providerName="System.Data.SqlClient"/>

下面看一下使用工厂的这个类:

 
 
 
  1. classDataBaseFac
  2. {
  3. privateDbConnectioncnn;//抽象类型
  4. privateDbCommandcmd;//抽象类型
  5. privateDbProviderFactoryprovider;
  6. publicDataBaseFac()
  7. {
  8. //从配置文件中取出标示数据库类型的字符串
  9. stringproviderName=ConfigurationManager.ConnectionStrings[1].ProviderName;
  10. //根据上一部的结果工厂创建一个对应的实例
  11. provider=DbProviderFactories.GetFactory(providerName);
  12. //使用该实例就可以创建对应的connection,command和adapater对象了
  13. //调试的时候可以看到这几个对象都变成了相应于数据库类型的
  14. cnn=provider.CreateConnection();
  15. cnn.ConnectionString=ConfigurationManager.ConnectionStrings[1].ConnectionString;
  16. cmd=provider.CreateCommand();
  17. cmd.Connection=cnn;
  18. }
  19. //执行一次查询,返回数据表
  20. publicDataTableExcuteQuery(stringqueryString)
  21. {
  22. DataTableresult=newDataTable();
  23. DbDataAdapteradapter=provider.CreateDataAdapter();
  24. cmd.CommandType=CommandType.Text;
  25. cmd.CommandText=queryString;
  26. adapter.SelectCommand=cmd;
  27. try
  28. {
  29. cnn.Open();
  30. adapter.Fill(result);
  31. }
  32. catch
  33. {
  34. result=null;
  35. }
  36. finally
  37. {
  38. cnn.Close();
  39. }
  40. returnresult;
  41. }

以上只是简单的应用,并没有做比较高级的封装,只供不知道的兄弟参考。

顺便说说,上午看到那个兄弟的文章用swith case语句来实现不同的创建connection ,command 和adapater的方法,然后说是C#工厂模式的实现。其实这是完全错误的,C#工厂模式的提出就是为了避免这么多swith case造成的麻烦。以后有时间我会把几个常用的模式的提出原因和应用场合总结一下用C#做几个例子给不清楚的兄弟贴出来的。

网页题目:C#工厂模式的实现
链接分享:http://www.shufengxianlan.com/qtweb/news20/144420.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联