c#中的数据库访问工厂

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

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

<connectionStrings>
    <add name="..." connectionString=" ..." providerName="System.Data.OleDb" />

    <add name="..." connectionString=" ..." providerName="System.Data.SqlClient" />
  </connectionStrings>

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

class DataBaseFac
  {
    private DbConnection cnn;//抽象类型
    private DbCommand cmd;//抽象类型
    private DbProviderFactory provider;
    public DataBaseFac()
    {

      //从配置文件中取出标示数据库类型的字符串
      string providerName = ConfigurationManager.ConnectionStrings[1].ProviderName;

      //根据上一部的结果工厂创建一个对应的实例
      provider = DbProviderFactories.GetFactory(providerName);

      //使用该实例就可以创建对应的connection,command和adapater对象了

      //调试的时候可以看到这几个对象都变成了相应于数据库类型的
      cnn = provider.CreateConnection();
      cnn.ConnectionString = ConfigurationManager.ConnectionStrings[1].ConnectionString;
      cmd = provider.CreateCommand();
      cmd.Connection = cnn;
    }

    //执行一次查询,返回数据表

    public DataTable ExcuteQuery(string queryString)
    {
      DataTable result = new DataTable();
      DbDataAdapter adapter = provider.CreateDataAdapter();
      cmd.CommandType = CommandType.Text;
      cmd.CommandText = queryString;
      adapter.SelectCommand = cmd;
      try
      {
        cnn.Open();
        adapter.Fill(result);
      }
      catch
      {
        result = null;
      }
      finally
      {
        cnn.Close();
      }
      return result;

    }

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

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

时间: 2024-12-22 00:03:30

c#中的数据库访问工厂的相关文章

在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreSQL.IBM DB2.或者国产达梦数据库等等,这些数据库的共同特点是关系型数据库,基本上开发的模型都差不多,不过如果我们基于ADO.NET的基础上进行开发的话,那么各种数据库都有自己不同的数据库操作对象,微软企业库Enterprise Library是基于这些不同数据库的操作做的抽象模型,适合多数据

分享一下DbHelper通用数据库访问帮助类

通常我们在开发使用数据库访问帮助类时,都单独的针对某一种数据进行编写相应的数据访问帮助类,如SQLHelper,OracleHelper,OleDbHelper等,其实这些都帮助类的实现都是继承并实现ADO.NET中的数据库访问基类的,如SQLCommand->DbCommand,SQLConnection->DbConnection等,在未优化数据访问层之前,通常的框架结构如下所示: 其实我们现在可以将SQLServer,Oracle等的数据访问模块进行优化,将其合并为一个通用的DbHelp

在JDBC设计中加速JSP访问数据库

JSP程序都是模块,并且具有强大的表达-请求(presentation-request)功能.建立一个完美的数据库 访问是一个具有挑战的过程,而JDBC接口能够很好地完成这一过程.然而,嵌入于JSP代码中的JDBC代码 ,与SQL命令嵌入在JDBC一样,可以充分利用JSP的功能,为客户端建立一个整洁而简便的API.为了达到 这一目的,我们可以考虑到使用JSP操作来建立数据库接口组件. 完美的JSP设计模式是Model-View-Controller (MVC).传统三层体系为:Model为程序逻

ap plet中应用JDBC访问数据库

  ap plet是用Java语言编写的小应用程序,它能够嵌入在HTML中,并由WWW浏览器来解释执行.但是,如何在ap plet中处理Internet世界中大量的数据和分布在网络各个角落的各种各样的资源呢?这就要使用JDBC. 一. JDBC的工作原理 JDBC(Java DataBase Connectivity)是用于执行SQL语句的Java应用程序接口,由一组用Java语言编写的类与接口组成.JDBC是一种规范,它让各数据库厂商为Java程序员提供标准的数据库访问类和接口,这样就使得独立

加快JDBC中JSP数据库的访问速度

JSP程序都是模块,并且具有强大的表达-请求(divsentation-request)功能. 建立一个完美的数据库访问是一个具有挑战的过程,而JDBC接口能够很好地完成这一过程. 然而,嵌入于JSP代码中的JDBC代码,与SQL命令嵌入在JDBC一样,可以充分利用JSP的功能,为客户端建立一个整洁而简便的API.为了达到这一目的,我们可以考虑到使用JSP操作来建立数据库接口组件. 完美的JSP设计模式是Model-View-Controller (MVC).传统三层体系为:Model为程序逻辑

在javaweb项目中 我要遍历项目中的产品图片,但是数据库访问的是URL,优化ftp上的图片

问题描述 在javaweb项目中 我要遍历项目中的产品图片,但是数据库访问的是URL,优化ftp上的图片 在javaweb项目中 我要遍历项目中的产品图片,但是数据库访问的是URL,我现在想优化这些图片,从ftp上遍历的时候就直接给图片压缩,只减少图片的KB,但是不能减少尺寸. 这样的需求 我该如何用java代码实现啊 求教育啊!!! 解决方案 没有必要,你的web server开启gzip压缩就可以了.效果差不多,不用任何代码. 解决方案二: http://www.mycodes.net/78

access怎么早局域网中当数据库让其他机器访问

问题描述 求助!access怎么早局域网中当数据库让其他机器访问 解决方案 解决方案二:丢共享文件夹里解决方案三:用文件共享的方式,例如:\计算机名目录名文件名.mdb(.accdb)解决方案四:共享文件或者做一台服务器,装上iis,布置一个webservice,通过这个访问解决方案五:做成服务端提供接口供其它机器访问这样比较好...解决方案六:用共享文件的方式比较简单,但是安全性很差,建议还是有SQLServer或者ORACLE吧解决方案七:做个小网站,access做后台数据库,也算一种方法解

三层架构中数据库访问的问题

问题描述 这里主要是想问一个结构的问题.当然我测试链接成功以后,我关闭了数据库配置界面.内存里面其实是把我点击测试链接以后的数据给释放了.再返回到登录验证用户名这个环节的时候,无法执行一些SQL的查询语句了.有什么方法可以让数据库连接保存或者下来.或者一般在三层架构中,数据库链接这块,是放在DAL这层去处理?还是说哪一层?特别小白的一个问题,感谢大家指导! 解决方案 解决方案二:起码数据库连接对象不应该放在窗体中,这样的话它会随着窗体释放而被回收解决方案三:这不是结构问题,而是流程问题测试数据库

使用设计模式构建通用数据库访问类

访问|设计|数据|数据库 使用设计模式构建通用数据库访问类 在应用程序的设计中,数据库的访问是非常重要的,我们通常需要将对数据库的访问集中起来,以保证良好的封装性和可维护性.在.Net中,数据库的访问,对于微软自家的SqlServer和其他数据库(支持OleDb),采用不同的访问方法,这些类分别分布于System.Data.SqlClient和System.Data.OleDb名称空间中.微软后来又推出了专门用于访问Oracle数据库的类库.我们希望在编写应用系统的时候,不因这么多类的不同而受到