asp.net三層架構詳解
一、資料庫
/*==============================================================*//* DBMS name: Microsoft SQL Server 2000 */
/*==============================================================*/
if exists (select 1
from sysobjects
where id = object_id('newsContent
and type = 'U')
drop table newsContent
go
/*==============================================================*/
/* Table: newsContent */
/*==============================================================*/
create table newsContent (
ID int
Title nvarchar(50) not null,
Content ntext not null,
AddDate datetime not null,
CategoryID int not null
)
go
二、專案檔案架構
實現步驟為:4-3-6-5-2-1
ID |
專案 |
描述 |
用途 |
專案引用關係 |
例項所需檔案 |
相關方法 |
1 |
Web |
表現層 |
Web頁和控制元件 |
引用BLL |
WebUI.aspx WebUI.aspx.cs |
GetContent() |
2 |
BLL |
業務邏輯層 |
業務邏輯元件 |
引用 IDAL,Model,使用DALFactory建立例項 |
Content.cs |
ContentInfo GetContentInfo(int id) |
3 |
IDAL |
資料訪問層介面定義 |
每個DAL實現都要實現的一組介面 |
引用 Model |
IContent.cs |
ContentInfo GetContentInfo(int id) |
4 |
Model |
業務實體 |
傳遞各種資料的容器 |
無引用 |
ContentInfo.cs |
|
5 |
DALFactory |
資料層的抽象工廠 |
建立反射,用來確定載入哪一個資料庫訪問程式集的類 |
引用IDAL,通過讀取web.config裡設定的程式集,載入類的例項,返回給BLL使用。 |
Content.cs |
IDAL.Icontent create() |
6 |
SQLServerDAL |
SQLServer資料訪問層 |
Microsoft SQL Server特定的Pet Shop DAL實現,使用了IDAL介面 |
引用 Model和IDAL,被DALFactory載入的程式集,實現接口裡的方法。 |
SqlHelper.cs Content.cs |
SqlDataReader ExecuteReader() PrepareCommand() ContentInfo GetContentInfo(int id) |
OracleDAL |
Oracle資料訪問層 |
|||||
7 |
DBUtility |
資料庫訪問元件基礎類 |
GetSqlServerConnectionString得到資料庫連線字串,也可省去該專案,在SQLServerDAL.SqlHelper中用static readonly string SqlConnectionString代替。 |
無引用 |
實現步驟過程
1、建立Model,實現業務實體。
2、建立IDAL,實現介面。
3、建立SQLServerDAL,實現接口裡的方法。
4、增加web.config裡的配置資訊,為SQLServerDAL的程式集。
5、建立DALFactory,返回程式集的指定類的例項。
6、建立BLL,呼叫DALFactory,得到程式集指定類的例項,完成資料操作方法。
7、建立WEB,呼叫BLL裡的資料操作方法。
注意:
1、web.config裡的程式集名稱必須與SQLServerDAL裡的輸出程式集名稱一致。
2、DALFactory裡只需要一個DataAccess類,可以完成建立所有的程式集例項。
3、專案建立後,注意修改各專案的預設名稱空間和程式集名稱。
4、注意修改解決方案裡的專案依賴。
5、注意在解決方案裡增加各專案引用。
三、各層間的訪問過程
1、傳入值,將值進行型別轉換(為整型)。
2、建立BLL層的content.cs物件c,通過物件c訪問BLL層的方法GetContentInfo(ID)呼叫BLL層。
3、BLL層方法GetContentInfo(ID)中取得資料訪問層SQLServerDAL的例項,例項化IDAL層的介面物件dal,這個物件是由工廠層DALFactory建立的,然後返回IDAL層傳入值所查詢的內容的方法dal.GetContentInfo(id)。
4、資料工廠通過web.config配置檔案中給定的webdal字串訪問SQLServerDAL層,返回一個完整的呼叫SQLServerDAL層的路徑給 BLL層。
5、到此要呼叫SQLServerDAL層,SQLServerDAL層完成賦值Model層的物件值為空,給定一個引數,呼叫SQLServerDAL層的SqlHelper的ExecuteReader方法,讀出每個欄位的資料賦值給以定義為空的Model層的物件。
6、SqlHelper執行sql命令,返回一個指定連線的資料庫記錄集,在這裡需要引用引數型別,提供為開啟連線命令執行做好準備PrepareCommand。
7、返回Model層把查詢得到的一行記錄值賦值給SQLServerDAL層的引入的Model層的物件ci,然後把這個物件返回給BLL。
8、回到Web層的BLL層的方法呼叫,把得到的物件值賦值給Lable標籤,在前臺顯示給介面
四、專案中的檔案清單
1、DBUtility專案
(1)connectionInfo.cs
using System;using System.Configuration;
namespace Utility
{
///<summary>/// ConnectionInfo 的摘要說明。
///</summary> public class ConnectionInfo
{
public static string GetSqlServerConnectionString()
{
return ConfigurationSettings.AppSettings["SQLConnString"];
}
}
}
2、SQLServerDAL專案
(1)SqlHelper.cs抽象類
using System;using System.Data;
using System.Data.SqlClient;
using DBUtility;
namespace SQLServerDAL
{
///<summary>/// SqlHelper 的摘要說明。
///</summary> public abstract class SqlHelper
{
public static readonly string CONN_STR = ConnectionInfo.GetSqlServerConnectionString();
///<summary>/// 用提供的函式,執行SQL命令,返回一個從指定連線的資料庫記錄集
///</summary>///<remarks>/// 例如:
/// SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
///</remarks>///<param name="connectionString">SqlConnection有效的SQL連線字串</param>///<param name="commandType">CommandType:CommandType.Text、CommandType.StoredProcedure</param>///<param name="commandText">SQL語句或儲存過程</param>///<param name="commandParameters">SqlParameter[]引數陣列</param>///<returns>SqlDataReader:執行結果的記錄集</returns> public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connString);
// 我們在這裡用 try/catch 是因為如果這個方法丟擲異常,我們目的是關閉資料庫連線,再丟擲異常,
// 因為這時不會有DataReader存在,此後commandBehaviour.CloseConnection將不會工作。 try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch
{
conn.Close();
throw;
}
}
///<summary>/// 為執行命令做好準備:開啟資料庫連線,命令語句,設定命令型別(SQL語句或儲存過程),函式語取。
///</summary>///<param name="cmd">SqlCommand 元件</param>///<param name="conn">SqlConnection 元件</param>///<param name="trans">SqlTransaction 元件,可以為null</param>///<param name="cmdType">語句型別:CommandType.Text、CommandType.StoredProcedure</param>///<param name="cmdText">SQL語句,可以為儲存過程</param>///<param name="cmdParms">SQL引數陣列</param> private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null)
{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
}
}
(2)Content.cs類
using System;using System.Data;
using System.Data.SqlClient;
using Model;
using IDAL;
namespace SQLServerDAL
{
///<summary>/// Content 的摘要說明。
///</summary> public class Content:IContent
{
private const string PARM_ID = "@ID";
private const string SQL_SELECT_CONTENT = "Select ID, Title, Content, AddDate, CategoryID From newsContent Where ID = @ID";
public ContentInfo GetContentInfo(int id)
{
//創意文章內容類 ContentInfo ci = null;
//建立一個引數 SqlParameter parm = new SqlParameter(PARM_ID, SqlDbType.BigInt, 8);
//賦上ID值 parm.Value = id;
using(SqlDataReader sdr = SqlHelper.ExecuteReader(SqlHelper.CONN_STR, CommandType.Text, SQL_SELECT_CONTENT, parm))
{
if(sdr.Read())
{
ci = new ContentInfo(sdr.GetInt32(0),sdr.GetString(1), sdr.GetString(2),
sdr.GetDateTime(3), sdr.GetInt32(4), sdr.GetInt32(5), sdr.GetString(6));
}
}
return ci;
}
}
}
3、Model專案
(1)contentInfo.cs
using System;namespace Model
{
///<summary>/// Class1 的摘要說明。
///</summary> public class ContentInfo
{
private int _ID;
private string _Content;
private string _Title;
private
相關推薦
asp.net三層架構詳解
一、資料庫 /*==============================================================*/ /* DBMS name: Microsoft SQL Server 2000
asp.net三層架構連線Oracle 11g詳解
asp.net三層架構連線Oracle 11g 連線Oracle時使用微軟的Oracle連線元件; 一 DAL層 using System; using System.Collections.Generic; using System.Text; using System
Java Web 三層架構詳解
王飛翔_ java 三層架構ssh 一個spring2.5+hibernate3.2+struts2.0組合框架,使用spring的 IoC來管理應用的 所有bean,包括struts2的 action,充分發揮了spring輕量級框架的 優勢。 摘 要:
JavaWeb三層架構詳解
什麼是三層架構? 三層架構(3-tier architecture) 通常意義上的三層架構就是將整個業務應用劃分為:介面層(User Interface layer)、業務邏輯層(Business Logic Layer)、資料訪問層(Data access layer
VS2010構建ASP.NET三層架構例項演示(一)
開發環境:vs2010+SQLSERVER2008 功能:簡單實現顯示一張表的記錄。 具體步驟: 1、開啟sql server2008,在裡面建立資料庫名為halfcool,然後在資料庫建立users表,裡面有三個欄位id(自動增加),username(
VS2010構建ASP.NET三層架構例項演示(三)
8、業務層(Bll),針對具體問題的操作,也可以說是對資料層的操作,對資料業務邏輯處理。 建立的方法同上。名稱為Bll;解決方案:新增到解決方案;路徑為e:\test\Solution1;然後將Bll目錄下面的class1.cs改名為UserBll.cs了。這層要引用Da
C#三層架構詳解--以系統登入為例
引言 通常意義上的三層架構是將真個業務應用劃分為:介面層(UI層)、業務邏輯層(B層)、資料訪問層(D層)。對於複雜的系統分層讓結構清晰,便於開發人員對系統進行整體的理解、把握;而且便於維護,系統基本的架構可以通過工具自動生成程式碼。當資料庫發生改變時,只用
ASP.NET 三層架構技術 人力資源管理系統專案HR (深入WebServic
白菜價, 想要的聯絡QQ:867635458,非誠勿擾! ASP.NET MVC Linq 技術 企業級通用OA系統 全程開發 大型企業級別OA專案實戰全新上線啦!本專案由小孔子講師全程錄製。小孔子老師大家都很熟悉了,他所錄製的其他課程都受到了學員的一致好
【ASP.NET開發】.NET三層架構簡單解析
這篇文章本來應該很早就寫出來的,但是一直苦於自己的精神能力有限,而且已經到了我們學校的考試周,所以時間上還是有點緊迫。關鍵的一點就是,找不到合理的思路來寫,思路沒有的話,就算是再好的素材,也寫不來大家喜歡的文章。 之前已經寫過關於.NET三層架的兩篇文章了,一篇是《【ASP
Asp.Net MVC3 簡單入門詳解過濾器Filter
添加 重復 權限 組件 再次 ace text ext 開發 前言 在開發大項目的時候總會有相關的AOP面向切面編程的組件,而MVC(特指:Asp.Net MVC,以下皆同)項目中不想讓MVC開發人員去關心和寫類似身份驗證,日誌,異常,行為截取等這部分重復的代碼,那我們可以
asp.net程序發布詳解
存在 mage com 環境 整體 cnblogs 配置 轉載 系列 本文轉載自Alan_beijing的博客ASP.NET 程序發布詳細過程。內容進行了部分更改。 ASP.NET網站的發布,無論是初學者還是高手,在程序的發布過程中或多或少會存在一些問題,譬如VS發布AS
經典ASP NET MVC3 0入門詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Asp.net中GridView使用詳解(引)
GridView無程式碼分頁排序 GridView選中,編輯,取消,刪除 GridView正反雙向排序 GridView和下拉選單DropDownList結合 GridView和CheckBox結合 滑鼠移到GridView某一行時改變該行的背景色方法一 滑鼠移到GridView某一行時改變該
B/S系統MVC與三層結構詳解
我們平時總是將三層架構與MVC混為一談,殊不知它倆並不是一個概念。 下面我來為大家揭曉我所知道的一些真相。 首先,它倆根本不是一個概念。 三層架構是一個分層式的軟體體系架構設計,它可適用於任何一個專案。 MVC是一個設計模式,它是根據專案的具體需求來決定是否適
ASP.NET MSChart 入門 Series 詳解 (四)
///<summary> ///定義Series適用大部分圖形樣式------不適合樣式有、餅圖、空心餅圖等 ///</summary> ///<param name="
.net三層架構開發步驟
City城市表,id ,name,password,address,phone; 1.新建一個windows窗體應用程式,CitySys 2.檔案–》新增–》新建專案–》類庫(CitySysModel)–》重新命名class1.cs的類(CityModel)。 3.根據資料表裡面的欄位,
Asp.Net MVC3 簡單入門詳解過濾器Filter(身份驗證、快取、防盜鏈、國際化等)
下面我們說幾個系統的Filter三、AcceptVerbs規定頁面的訪問形式,如 [AcceptVerbs(HttpVerbs.Post)]public ActionResult Example(){return View(); }頁面只能以Post形式訪問,即表單提交。四、Ac
.NET三層架構
零基礎學C#3.0 -- .net的三層架構 - CodingPenguin 時間 2014-01-26 17:40:00 部落格園-所有隨筆區 原文 http://www.cnblogs.com/codingpenguin/p/3534304.html 主題 .N
ASP.net連線Mysql資料庫詳解
1、資源:Mysql-5.6.24-win32、VS2013、mysql-connector-odbc-5.3.6-win32; 2、ODBC下載:在Mysql官網可下載Mysql ODBC,注意,什麼版本的mysql配什麼版本的ODBC,很重要! 下載後雙擊安裝。 3、
.NET 三層架構
Connection : 用於連線資料庫命令. Command : 執行鍼對資料庫的SQL命令. ExecuteScalar() : 返回第一行第一列的值(object型別). ExecuteNonQuery() : 返回執行命令後受到影響的行數(int型別). ExecuteReade