ASP.NET MVC三層架構(gòu)實(shí)例
前幾天收到CodeProject的電郵,asp.net mvc 的E文教程正在編寫,一個老外蠻偉大的,免費(fèi)貢獻(xiàn)***章,也有100多頁的內(nèi)容。其中大量應(yīng)用了LINQ技術(shù)(看來得花時間看看了,用統(tǒng)一的方式來面對所有數(shù)據(jù)源,確實(shí)還是蠻吸引人的)。當(dāng)然,LINQ不是MVC必須的,你可以用很多技術(shù)實(shí)現(xiàn),比如NHibernate,甚至原生的ADO.NET。
既然是實(shí)例,我直接上代碼了,基礎(chǔ)理論一搜一大把,但我還是覺得實(shí)踐才是最重要的:
ASP.NET MVC三層架構(gòu)實(shí)例:首先的數(shù)據(jù)訪問層,Database類:
- using System;
- using System.Data;
- using System.Configuration;
- using System.Linq;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Xml.Linq;
- using System.Data.SqlClient;
- namespace northWind3Tier.DataAccessLayer
- {
- /// < summary>
- /// 用于數(shù)據(jù)訪問
- /// < /summary>
- public class Database
- {
- /// < summary>
- /// 數(shù)據(jù)庫連接
- /// < /summary>
- protected SqlConnection conn;
- /// < summary>
- /// 數(shù)據(jù)庫連接字符串
- /// < /summary>
- protected string connStr;
- public Database()
- {
- this.connStr = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;
- }
- /// < summary>
- /// 關(guān)閉數(shù)據(jù)庫連接
- /// < /summary>
- ~Database()//析構(gòu)函數(shù)不帶訪問修飾符
- {
- try
- {
- if (conn != null)
- {
- conn.Close();
- }
- }
- catch { }
- }
- /// < summary>
- /// 打開數(shù)據(jù)庫連接
- /// < /summary>
- protected void Open()
- {
- if (conn == null)
- {
- conn = new SqlConnection(connStr);
- }
- if (conn.State.Equals(ConnectionState.Closed))
- {
- conn.Open();
- }
- }
- /// < summary>
- /// 關(guān)閉數(shù)據(jù)庫連接
- /// < /summary>
- protected void Close()
- {
- if (conn != null)
- {
- conn.Close();
- }
- }
- /// < summary>
- /// 獲取數(shù)據(jù),返回一個dataset
- /// < /summary>
- /// < param name="sql">sql語句< /param>
- /// < returns>< /returns>
- public DataSet GetDataSet(string sql)
- {
- Open();
- SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
- DataSet dataset = new DataSet();
- adapter.Fill(dataset);
- Close();
- return dataset;
- }
- }
- }
ASP.NET MVC三層架構(gòu)實(shí)例:業(yè)務(wù)邏輯層 Category類:
- using System;
- using System.Data;
- using System.Configuration;
- using System.Linq;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Xml.Linq;
- using System.IO;
- using northWind3Tier.DataAccessLayer;
- namespace northWind3Tier.BusinessLayer
- {
- public class Category
- {
- /// < summary>
- /// 根據(jù)貨物ID獲取該貨物的詳細(xì)信息
- /// < /summary>
- /// < param name="categoryID">< /param>
- public void LoadData(int categoryID)
- {
- Database db = new Database();
- string sql = "select * from [Categories] where [CategoryID]="+categoryID;
- DataSet ds = db.GetDataSet(sql);
- //如果有查詢到數(shù)據(jù)的話,填充屬性
- if (ds.Tables[0].Rows.Count > 0)
- {
- this.categoryID =(int) ds.Tables[0].Rows[0]["CategoryID"];
- this.categoryName = ds.Tables[0].Rows[0]["CategoryName"].ToString();
- this.description = ds.Tables[0].Rows[0]["Description"].ToString();
- this.image =(byte[]) ds.Tables[0].Rows[0]["Picture"];
- }
- }
- /// < summary>
- /// 字段和屬性
- /// < /summary>
- #region
- private int categoryID;
- /// < summary>
- /// 編號
- /// < /summary>
- public int CategoryID
- {
- get { return categoryID; }
- set { categoryID = value; }
- }
- private string categoryName;
- /// < summary>
- /// 名稱
- /// < /summary>
- public string CategoryName
- {
- get { return categoryName; }
- set { categoryName = value; }
- }
- private string description;
- /// < summary>
- /// 說明
- /// < /summary>
- public string Description
- {
- get { return description; }
- set { description = value; }
- }
- private byte[] image;
- /// < summary>
- /// 圖像
- /// < /summary>
- public byte[] Image
- {
- get { return image; }
- set { image = value; }
- }
- #endregion
- }
- }
ASP.NET MVC三層架構(gòu)實(shí)例:***就是顯示層,前臺aspx代碼:
- < %@ Page Language="C#" AutoEventWireup="true" CodeBehind="CateqoryQuery.aspx.cs" Inherits="northWind3Tier.CateqoryQuery" %>
- < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- < html xmlns="http://www.w3.org/1999/xhtml" >
- < head runat="server">
- < title>Untitled Page< /title>
- < /head>
- < body>
- < form id="form1" runat="server">
- < div>
- < asp:Label ID="Label1" runat="server" Text="貨物編號(1-9):">< /asp:Label>
- < asp:TextBox ID="TextBox1" runat="server">< /asp:TextBox>
- < asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="查詢"
- Width="65px" />
- < br />
- < br />
- < asp:Label ID="lblCategoryInfo" runat="server" Text="Label">< /asp:Label>
- < br />
- < asp:Image ID="Image1" runat="server" />
- < /div>
- < /form>
- < /body>
- < /html>
ASP.NET MVC三層架構(gòu)實(shí)例:后臺cs代碼:
- using System;
- using System.Collections;
- using System.Configuration;
- using System.Data;
- using System.Linq;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Xml.Linq;
- using northWind3Tier.BusinessLayer;
- using System.IO;
- namespace northWind3Tier
- {
- public partial class CateqoryQuery : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- protected void Button1_Click(object sender, EventArgs e)
- {
- int categoryID = -1;
- if (TextBox1.Text != "")
- {
- try
- {
- categoryID = Convert.ToInt32(TextBox1.Text);
- //if ((categoryID < 1) || (categoryID > 9))
- }
- catch
- {
- Response.Write("< mce:script type="text/javascript">< !--
- alert('只能輸入1-9之間的數(shù)字')
- // -->< /mce:script>");
- return;
- }
- }
- Category category = new Category();
- category.LoadData(categoryID);
- lblCategoryInfo.Text = "編號:" + category.CategoryID;
- lblCategoryInfo.Text += "< BR>名稱:" + category.CategoryName;
- lblCategoryInfo.Text += "< BR>描述:" + category.Description;
- byte[] image = category.Image;
- //northwind數(shù)據(jù)庫中的image字段(byte數(shù)組)的前面78是無用的,必須剔除才能正常顯示圖像
- byte[] temp = new byte[image.Length - 78];
- Array.Copy(image , 78, temp, 0, image.Length - 78);
- string strPath = "photo/temp.JPG";
- string strPhotoPath =strPath;
- //保存圖片文件
- BinaryWriter bw = new BinaryWriter(File.Open(Server.MapPath (strPhotoPath), FileMode.OpenOrCreate));
- bw.Write(temp);
- bw.Close();
- //顯示圖片
- this.Image1.ImageUrl = strPath;
- }
- }
- }
【編輯推薦】