zoukankan      html  css  js  c++  java
  • ASP.NET连接SQL、Access、Excel数据库(三)——工厂模式

    源代码:13033480群共享

    一、工厂模式

    添加新项→窗体CommonToDatabase.aspxWeb.config中的5个连接字体串不变,CommonToDatabase.aspx.cs中添加如下代码:

    using System;

    using System.Data;

     

    using System.Configuration;

     

    using System.Data.Common;

     

    public partialclassCommonToDatabase : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            //分别与下面命名空间成对替换OleDbToSQLString、OleDbToAccessString、OleDbToExcelString、OdbcToExcelString

            String connectionString =ConfigurationManager.ConnectionStrings["SQLServerToSQLString"].ConnectionString;

     

            //分别与上面连接字符串成对替换System.Data.OleDb、System.Data.OleDb、System.Data.OleDb、System.Data.Odbc

            DbProviderFactory dbfactory =DbProviderFactories.GetFactory("System.Data.SqlClient");

     

            DbConnection conn = dbfactory.CreateConnection();

            conn.ConnectionString = connectionString;

     

     

            DbCommand cmd = dbfactory.CreateCommand();

            cmd.Connection = conn;

            cmd.CommandType = CommandType.Text;

            cmd.CommandText = "SELECT * FROM Category";

     

            conn.Open();

     

            DbDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())

            {

                Response.Write(rdr["Name"] +"<br/>");

            }

     

            rdr.Close();

            conn.Close();

     

     

        }

    }

    在浏览器中查看CommonToDatabase.aspx,并分别用另4对连接字符串和数据提供程序的命名空间,也就是PriverName替换。这样,就实现了代码不变的情况下,五种数据库的连接方法。连接字符串和PriverName都可以在Web.config中进行设置,代码就一点都不需要改变了。

    二、工厂模式的应用

    工厂模式的最大好处,就是可以实现,在配置文件中改变一下设置,就可以改变数据库的连接,切换到不同的数据库。

    一、Web.config

    <appSettings>

        <addkey="DatabaseSelect"value="OleDbToAccessString"/>

      </appSettings>

      <connectionStrings>

        <addname="SQLServerToSQLString"connectionString="Server=.\SQLEXPRESS;Database=NetShop;Trusted_Connection=yes;"providerName="System.Data.SqlClient"/>

        <addname="OleDbToSQLString"connectionString="Provider=SQLOLEDB;Server=.\SQLEXPRESS;Database=NetShop;Trusted_Connection=yes;"providerName="System.Data.OleDb"/>

        <addname="OleDbToAccessString"connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\NetShop.mdb"providerName="System.Data.OleDb"/>

        <addname="OleDbToExcelString"connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\NetShop.xls;extended properties=excel 8.0;"providerName="System.Data.OleDb"/>

        <addname="OdbcToExcelString"connectionString="Driver={Microsoft Excel Driver (*.xls)};DBQ=|DataDirectory|\NetShop.xls"providerName="System.Data.Odbc"/>

      </connectionStrings>

    二、UsingFactory.aspx.cs

    using System;

    using System.Data;

     

    using System.Configuration;

     

    using System.Data.Common;

     

    public partialclassUsingFactory : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            String strDB = ConfigurationManager.AppSettings["DatabaseSelect"];

     

            String connectionString =ConfigurationManager.ConnectionStrings[strDB].ConnectionString;

            String priverName = ConfigurationManager.ConnectionStrings[strDB].ProviderName;

     

            DbProviderFactory dbfactory =DbProviderFactories.GetFactory(priverName);

     

            DbConnection conn = dbfactory.CreateConnection();

            conn.ConnectionString = connectionString;

     

     

            DbCommand cmd = dbfactory.CreateCommand();

            cmd.Connection = conn;

            cmd.CommandType = CommandType.Text;

            cmd.CommandText = "SELECT * FROM Category";

     

            conn.Open();

     

            DbDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())

            {

                Response.Write(rdr["Name"] +"<br/>");

            }

     

            rdr.Close();

            conn.Close();

     

        }

    }

    【技术要点】

    1Web.config<addkey="DatabaseSelect"value="OleDbToAccessString"/>value值,可以设置为5个连接字符串的name值。

    2、连接字符串中providerName属性在这时超了作用,可由ConfigurationManager类读出,作为DbProviderFactories类创建不同的工厂类DbProviderFactory的参数,不同的工厂类,就可以创建不同的DbProviderFactory

    3、严重怀疑,4个数据提供程序,也就是4个命名空间的类,采用了相同的接口,至少,Connectin类是这样,不然DbConnection没有办法指向不同的类,并调用不同类中的属性与方法。

  • 相关阅读:
    取字符串前缀
    分解质因数
    git 常用命令
    微信 iphone端 audio 播放问题
    git入门:创建合并分支 解决冲突 分支管理策略
    git入门:远程仓库 github篇
    git入门:撤销修改 删除文件
    git入门: 工作区暂存区 以及 管理修改
    函数柯里化实现
    转载:深度工作:充分使用每一份脑力
  • 原文地址:https://www.cnblogs.com/WestGarden/p/3138372.html
Copyright © 2011-2022 走看看