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造成的麻烦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮特大熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值