您的位置:首页 > 数据库

C#中的数据库访问工厂

2012-07-30 15:23 211 查看
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造成的麻烦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息