博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET连接SQL、Access、Excel数据库(三)——工厂模式
阅读量:6223 次
发布时间:2019-06-21

本文共 3526 字,大约阅读时间需要 11 分钟。

源代码: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没有办法指向不同的类,并调用不同类中的属性与方法。

转载于:https://www.cnblogs.com/WestGarden/archive/2012/04/25/3138372.html

你可能感兴趣的文章
Solr使用SolrJ出现Lock obtain timed out: NativeFSLock
查看>>
解决maven模块化开发打jar包会过滤掉配置文件(xml,properties)的问题
查看>>
android中使用ViewPager实现图片左右拖动
查看>>
MVC设计模式
查看>>
JavaScript字典
查看>>
A Tour of the Dart Language(译文):三函数
查看>>
从C++到java
查看>>
05. Java NIO Scatter / Gather
查看>>
java.lang.IllegalStateException异常产生的原因及解决办法
查看>>
IOS中常用的知识总结(二)
查看>>
调用另一个Activity
查看>>
关于 Apache 的 25 个初中级面试题
查看>>
Activity那些不得不说的事
查看>>
小米生早了!!
查看>>
mysqldump: Got error: 1556: You can't use locks with log tables
查看>>
JS闭包
查看>>
Windows 管理PostgreSQL服务
查看>>
演讲实录 | Service Mesh 时代的选边与站队(附PPT下载)
查看>>
Eclipse 安装findbugs插件
查看>>
labview加密分析-1综述
查看>>