日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

抽象工厂模式:实现ASP.NET访问不同数据库

發布時間:2025/6/15 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 抽象工厂模式:实现ASP.NET访问不同数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ASP.NET網站開發中可能會遇到要更換數據庫,如將Aceess換為SQL Server?,由于Aceess引用System.Data.OleDb命名空間,SQL Server引用System.Data.SqlClient命名空間。在一般程序代碼中我們需要更改連接字符串,ADO.NET數據訪問命令對象,最麻煩的是不同數據庫有各自不同Sql命令。我們可以使用抽象工廠模式實現ASP.NET訪問不同數據庫。

?

1、抽象工廠模式(Abstract Factory):提供一個創建一系列相互依賴對象的接 口,而無需指定他們的具體類。

2、一般組成:抽象 產品接口,具體產品類,抽象工廠接口,具體工廠類,客戶端代碼

3、作用:易于交換 產品系列,在一個應用中只需在初始化的時候出現一次,這就使得改變一個應用的具體工廠的具體工廠變得非常容易,只需改變具體工廠即可使用不同的產品配置

讓具體的創建實例過程與客戶端分離,客戶端是通過他們的抽象 類接口操縱實例,產品的具體類名也被具體工廠是實現分離,不會出現在客戶代碼中。

?

?

網上提供的代碼基本是為了講解說 明C#設計模式,由C#控制臺程序代碼實現,并沒有真正實現訪問數據庫。我這里通過建立一個ASP.NET網站,實現訪問AccessSQL Server數據庫。主要參考《大話設計模式》

具體步驟代碼如下:

1、?分別在AccessSQL Server建立數據庫DaHua與數據庫表User(ID,Name)DepartmentID,DepartName

2、?啟動Visual Studio 2005/2008新建網站

3、?web.config添加數據庫連接

4、?在網站解決方案右鍵新建類庫ClassLibrary1新建類文件,包 括:

AbstractUser抽象類,SqlserverUser類,AccessUser類

AbstractDepartment抽象類,SqlserverDepartment類,AccessDepartment 類

DataAccess

生成dll

5、到項目添加引用,項目-右鍵-添加引用-項目-ClassLibrary1

6、前臺代碼:添加一個GridView控件,三個Button控件,2個TextBox控件

用于查詢表User和Department表內容,插入User表數據

?

?

using?System;

using?System.Configuration;

using?System.Data;

using?System.Linq;

using?System.Web;

using?System.Xml.Linq;

using?System.Data.SqlClient;

using?System.Data.OleDb;

using?System.Reflection;

?

namespace?ClassLibrary1

{

????
///?<summary>

????
///AbstractUser抽象類

????
///?</summary>

????
public?abstract?class?AbstractUser

????{

????????
public?abstract?DataSet?GetUser();

????????
public?abstract?void?InsertUser(string?userID,?string?userName);

????}

?

????
///?<summary>

????
///?SqlserverUser類

????
///?</summary>

????
public?class?SqlserverUser?:?AbstractUser

????{

????????
string?constr?=?ConfigurationManager.ConnectionStrings["constrSQLDahua"].ConnectionString;

?

????????
public?override?DataSet?GetUser()

????????{

????????????SqlConnection?conn?
=?new?SqlConnection(constr);

????????????
if?(conn.State?==?ConnectionState.Closed)

????????????????conn.Open();

?

????????????SqlCommand?cmd?
=?new?SqlCommand("select?*?from?[User]",?conn);

????????????SqlDataAdapter?sda?
=?new?SqlDataAdapter();

????????????sda.SelectCommand?
=?cmd;

????????????DataSet?ds?
=?new?DataSet();

????????????sda.Fill(ds);

????????????
return?ds;

????????}

?

????????
public?override?void?InsertUser(string?userID,?string?userName)

????????{

????????????SqlConnection?conn?
=?new?SqlConnection(constr);

????????????
if?(conn.State?==?ConnectionState.Closed)

????????????????conn.Open();

????????????SqlCommand?cmd?
=?new?SqlCommand();

????????????cmd.Connection?
=?conn;

????????????cmd.CommandText?
=?"insert?into?[User]?values('"?+?Int32.Parse(userID)?+?"','"?+?userName?+?"')?";

????????????cmd.ExecuteNonQuery();

????????????conn.Close();

?

????????}

????}

?

????
///?<summary>

????
///?AccessUser類

????
///?</summary>

????
public?class?AccessUser?:?AbstractUser

????{

????????
string?constr?=?ConfigurationManager.ConnectionStrings["constrAccessDaHua"].ConnectionString;

?

????????
public?override?DataSet?GetUser()

????????{

????????????OleDbConnection?conn?
=?new?OleDbConnection(constr);

????????????
if?(conn.State?==?ConnectionState.Closed)

????????????????conn.Open();

?

????????????OleDbCommand?cmd?
=?new?OleDbCommand("select?*?from?[User]",?conn);

????????????OleDbDataAdapter?sda?
=?new?OleDbDataAdapter();

????????????sda.SelectCommand?
=?cmd;

????????????DataSet?ds?
=?new?DataSet();

????????????sda.Fill(ds);

????????????
return?ds;

????????}

?

????????
public?override?void?InsertUser(string?userID,?string?userName)

????????{

????????????OleDbConnection?conn?
=?new?OleDbConnection(constr);

????????????
if?(conn.State?==?ConnectionState.Closed)

????????????????conn.Open();

????????????OleDbCommand?cmd?
=?new?OleDbCommand();

????????????cmd.Connection?
=?conn;

????????????cmd.CommandText?
=?"insert?into?[User]?values('"?+?Int32.Parse(userID)?+?"','"?+?userName?+?"')?";

????????????cmd.ExecuteNonQuery();

????????????conn.Close();

????????}

}

?

///?<summary>

????
///AbstractDepartment抽象類

????
///?</summary>

????
public?abstract?class?AbstractDepartment

????{

????????
public?abstract?DataSet?GetDepartment();

????????
//?void?InsertDepartment(string?depID,?string?depName);

????}

?

????
///?<summary>

????
///?SqlserverDepartment類

????
///?</summary>

????
public?class?SqlserverDepartment?:?AbstractDepartment

????{

????????
string?constr?=?ConfigurationManager.ConnectionStrings["constrSQLDahua"].ConnectionString;

?

????????
public?override?DataSet?GetDepartment()

????????{

????????????SqlConnection?conn?
=?new?SqlConnection(constr);

????????????
if?(conn.State?==?ConnectionState.Closed)

????????????????conn.Open();

?

????????????SqlCommand?cmd?
=?new?SqlCommand("select?*?from?[Department]",?conn);

????????????SqlDataAdapter?sda?
=?new?SqlDataAdapter();

????????????sda.SelectCommand?
=?cmd;

????????????DataSet?ds?
=?new?DataSet();

????????????sda.Fill(ds);

????????????
return?ds;

?

????????}

????}

?

????
///?<summary>

????
///?AccessDepartment?類

????
///?</summary>

????
public?class?AccessDepartment?:?AbstractDepartment

????{

????????
string?constr?=?ConfigurationManager.ConnectionStrings["constrAccessDaHua"].ConnectionString;

?

????????
public?override?DataSet?GetDepartment()

????????{

????????????OleDbConnection?conn?
=?new?OleDbConnection(constr);

????????????
if?(conn.State?==?ConnectionState.Closed)

????????????????conn.Open();

?

????????????OleDbCommand?cmd?
=?new?OleDbCommand("select?*?from?[Department]",?conn);

????????????OleDbDataAdapter?sda?
=?new?OleDbDataAdapter();

????????????sda.SelectCommand?
=?cmd;

????????????DataSet?ds?
=?new?DataSet();

????????????sda.Fill(ds);

????????????
return?ds;

????????}

?}

?

///?<summary>

????
///DataAccess類

????
///使用反射

????
///?</summary>

????
public?class?DataAccess

????{

????????
private?static?readonly?string?AssemblyName?=?"ClassLibrary1";?//程序集名稱

????????
private?static?readonly?string?db?=?"Sqlserver";?//數據庫類型名,要更改訪問的數據?庫,只需更改這里

?

????????
public?static?AbstractUser?CreateUser()

????????{

????????????
string?className?=?AssemblyName?+?"."?+?db?+?"User";?//命名空間.要實例化的類名

????????????
return?(AbstractUser)Assembly.Load(AssemblyName).CreateInstance(className);

????????}

?

????????
public?static?AbstractDepartment?CreateDepartment()

????????{

????????????
string?className?=?AssemblyName?+?"."?+?db?+?"Department";

????????????
return?(AbstractDepartment)Assembly.Load(AssemblyName).CreateInstance(className);

????????}

?}

}

?

前臺代碼:

public?partial?class?_Default?:?System.Web.UI.Page?

{

????ClassLibrary1.AbstractUser?au?
=?null;

????ClassLibrary1.AbstractDepartment?ad?
=?null;

?

????
protected?void?Page_Load(object?sender,?EventArgs?e)

????{

????????

???????

????}

????
protected?void?Button1_Click(object?sender,?EventArgs?e)

????{

????????au?
=ClassLibrary1.DataAccess.CreateUser();

????????DataSet?ds?
=?au.GetUser();

????????GridView1.DataSource?
=?ds;

????????GridView1.DataBind();

?

????}

????
protected?void?Button2_Click(object?sender,?EventArgs?e)

????{????????

????????
string?userID?=?txtID.Text;

????????
string?userName?=?txtName.Text?;

????????au?
=?ClassLibrary1.DataAccess.CreateUser();

????????au.InsertUser(userID,userName);

????}

?

????
//部門查詢

????
protected?void?Button3_Click(object?sender,?EventArgs?e)

????{

????????ad?
=?ClassLibrary1.DataAccess.CreateDepartment();

????????DataSet?ds?
=?ad.GetDepartment();

????????GridView1.DataSource?
=?ds;

????????GridView1.DataBind();

????}

}

?

轉自:http://blog.csdn.net/canhui87/archive/2009/10/20/4704781.aspx

總結

以上是生活随笔為你收集整理的抽象工厂模式:实现ASP.NET访问不同数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。