熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

c#中的數據庫訪問工廠

2013-11-13 12:13:59  來源: .NET編程 

  上午看到一個兄弟的文章很辛苦的想實現不改代碼只改配置來訪問不同類型的數據庫自己去實現工廠模式精神可嘉但是殊不知c#已經自己為不同類型數據庫的訪問做了一個工廠在這裡我就把使用工廠的例子貼出來供不知道的兄弟參考一下高手們可以忽略了

  首先是配置文件其中的providerName就是指定的不同數據庫類型

  <connectionStrings>
    <add name= connectionString= providerName=SystemDataOleDb />
  
    <add name= connectionString= providerName=SystemDataSqlClient />
  </connectionStrings>

  下面看一下使用工廠的這個類

   class DataBaseFac
  {
    private DbConnection cnn;//抽象類型
    private DbCommand cmd;//抽象類型
    private DbProviderFactory provider;
    public DataBaseFac()
    {
  
      //從配置文件中取出標示數據庫類型的字符串
      string providerName = ConfigurationManagerConnectionStrings[]ProviderName;
  
      //根據上一部的結果工廠創建一個對應的實例
      provider = DbProviderFactoriesGetFactory(providerName);
  
      //使用該實例就可以創建對應的connectioncommand和adapater對象了
  
      //調試的時候可以看到這幾個對象都變成了相應於數據庫類型的
      cnn = providerCreateConnection();
      cnnConnectionString = ConfigurationManagerConnectionStrings[]ConnectionString;
      cmd = providerCreateCommand();
      cmdConnection = cnn;
    }
  
    //執行一次查詢返回數據表
  
    public DataTable ExcuteQuery(string queryString)
    {
      DataTable result = new DataTable();
      DbDataAdapter adapter = providerCreateDataAdapter();
      cmdCommandType = CommandTypeText;
      cmdCommandText = queryString;
      adapterSelectCommand = cmd;
      try
      {
        cnnOpen();
        adapterFill(result);
      }
      catch
      {
        result = null;
      }
      finally
      {
        cnnClose();
      }
      return result;
  
    }

  以上只是簡單的應用並沒有做比較高級的封裝只供不知道的兄弟參考

  順便說說上午看到那個兄弟的文章用swith case語句來實現不同的創建connection command 和adapater的方法然後說是工廠方法的實現其實這是完全錯誤的工廠模式的提出就是為了避免這麼多swith case造成的麻煩以後有時間我會把幾個常用的模式的提出原因和應用場合總結一下用C#做幾個例子給不清楚的兄弟貼出來的


From:http://tw.wingwit.com/Article/program/net/201311/15456.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.