ASP.NET MVC三层架构实例

开发 后端
本文以Northwind数据库的表Categories为例,简明的演示了一个简单的ASP.NET MVC三层架构的例子。

前几天收到CodeProject的电邮,asp.net mvc 的E文教程正在编写,一个老外蛮伟大的,免费贡献***章,也有100多页的内容。其中大量应用了LINQ技术(看来得花时间看看了,用统一的方式来面对所有数据源,确实还是蛮吸引人的)。当然,LINQ不是MVC必须的,你可以用很多技术实现,比如NHibernate,甚至原生的ADO.NET。

既然是实例,我直接上代码了,基础理论一搜一大把,但我还是觉得实践才是最重要的:

ASP.NET MVC三层架构实例:首先的数据访问层,Database类:

  1. using System;     
  2. using System.Data;     
  3. using System.Configuration;     
  4. using System.Linq;     
  5. using System.Web;     
  6. using System.Web.Security;     
  7. using System.Web.UI;     
  8. using System.Web.UI.HtmlControls;     
  9. using System.Web.UI.WebControls;     
  10. using System.Web.UI.WebControls.WebParts;     
  11. using System.Xml.Linq;     
  12.     
  13. using System.Data.SqlClient;     
  14.     
  15. namespace northWind3Tier.DataAccessLayer     
  16. {     
  17.     /// < summary>     
  18.     /// 用于数据访问     
  19.     /// < /summary>     
  20.     public class Database     
  21.     {     
  22.         /// < summary>     
  23.         /// 数据库连接     
  24.         /// < /summary>     
  25.         protected SqlConnection conn;     
  26.         /// < summary>     
  27.         /// 数据库连接字符串     
  28.         /// < /summary>     
  29.         protected string connStr;     
  30.     
  31.         public Database()     
  32.         {     
  33.             this.connStr = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;     
  34.         }     
  35.         /// < summary>     
  36.         /// 关闭数据库连接     
  37.         /// < /summary>     
  38.          ~Database()//析构函数不带访问修饰符     
  39.         {     
  40.             try    
  41.             {     
  42.                 if (conn != null)     
  43.                 {     
  44.                     conn.Close();     
  45.                 }     
  46.             }     
  47.             catch { }     
  48.         }     
  49.         /// < summary>     
  50.         /// 打开数据库连接     
  51.         /// < /summary>     
  52.         protected void Open()     
  53.         {     
  54.             if (conn == null)     
  55.             {     
  56.                 conn = new SqlConnection(connStr);     
  57.             }     
  58.             if (conn.State.Equals(ConnectionState.Closed))     
  59.             {     
  60.                 conn.Open();     
  61.             }     
  62.         }     
  63.         /// < summary>     
  64.         /// 关闭数据库连接     
  65.         /// < /summary>     
  66.         protected void Close()     
  67.         {     
  68.             if (conn != null)     
  69.             {     
  70.                 conn.Close();     
  71.             }     
  72.         }     
  73.         /// < summary>     
  74.         /// 获取数据,返回一个dataset     
  75.         /// < /summary>     
  76.         /// < param name="sql">sql语句< /param>     
  77.         /// < returns>< /returns>     
  78.         public DataSet GetDataSet(string sql)     
  79.         {     
  80.             Open();     
  81.             SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);     
  82.             DataSet dataset = new DataSet();     
  83.             adapter.Fill(dataset);     
  84.             Close();     
  85.             return dataset;               
  86.         }     
  87.     }     
  88. }    

ASP.NET MVC三层架构实例:业务逻辑层 Category类:

  1. using System;     
  2. using System.Data;     
  3. using System.Configuration;     
  4. using System.Linq;     
  5. using System.Web;     
  6. using System.Web.Security;     
  7. using System.Web.UI;     
  8. using System.Web.UI.HtmlControls;     
  9. using System.Web.UI.WebControls;     
  10. using System.Web.UI.WebControls.WebParts;     
  11. using System.Xml.Linq;     
  12.     
  13. using System.IO;     
  14. using northWind3Tier.DataAccessLayer;     
  15. namespace northWind3Tier.BusinessLayer     
  16. {     
  17.     public class Category     
  18.     {     
  19.         /// < summary>     
  20.         /// 根据货物ID获取该货物的详细信息     
  21.         /// < /summary>     
  22.         /// < param name="categoryID">< /param>     
  23.         public void LoadData(int categoryID)     
  24.         {     
  25.             Database db = new Database();     
  26.             string sql = "select * from [Categories] where [CategoryID]="+categoryID;     
  27.             DataSet ds = db.GetDataSet(sql);     
  28.             //如果有查询到数据的话,填充属性     
  29.             if (ds.Tables[0].Rows.Count > 0)     
  30.             {     
  31.                 this.categoryID =(int) ds.Tables[0].Rows[0]["CategoryID"];     
  32.                 this.categoryName = ds.Tables[0].Rows[0]["CategoryName"].ToString();     
  33.                 this.description = ds.Tables[0].Rows[0]["Description"].ToString();     
  34.                 this.image =(byte[]) ds.Tables[0].Rows[0]["Picture"];                  
  35.             }     
  36.         }     
  37.         /// < summary>     
  38.         /// 字段和属性     
  39.         /// < /summary>    
  40.         #region     
  41.         private int categoryID;     
  42.         /// < summary>     
  43.         /// 编号     
  44.         /// < /summary>     
  45.         public int CategoryID     
  46.         {     
  47.             get { return categoryID; }     
  48.             set { categoryID = value; }     
  49.         }     
  50.         private string categoryName;     
  51.         /// < summary>     
  52.         /// 名称     
  53.         /// < /summary>     
  54.         public string CategoryName     
  55.         {     
  56.             get { return categoryName; }     
  57.             set { categoryName = value; }     
  58.         }     
  59.         private string description;     
  60.         /// < summary>     
  61.         /// 说明     
  62.         /// < /summary>     
  63.         public string Description     
  64.         {     
  65.             get { return description; }     
  66.             set { description = value; }     
  67.         }     
  68.         private byte[] image;     
  69.         /// < summary>     
  70.         /// 图像     
  71.         /// < /summary>     
  72.         public byte[] Image     
  73.         {     
  74.             get { return image; }     
  75.             set { image = value; }     
  76.         }    
  77.         #endregion     
  78.     
  79.     
  80.     
  81.     
  82.     }     
  83. }    

ASP.NET MVC三层架构实例:***就是显示层,前台aspx代码:

  1. < %@ Page Language="C#" AutoEventWireup="true" CodeBehind="CateqoryQuery.aspx.cs" Inherits="northWind3Tier.CateqoryQuery" %>     
  2.     
  3. < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">     
  4.     
  5. < html xmlns="http://www.w3.org/1999/xhtml" >     
  6. < head runat="server">     
  7.     < title>Untitled Page< /title>     
  8. < /head>     
  9. < body>     
  10.     < form id="form1" runat="server">     
  11.     < div>     
  12.          
  13.         < asp:Label ID="Label1" runat="server" Text="货物编号(1-9):">< /asp:Label>     
  14.         
  15.         < asp:TextBox ID="TextBox1" runat="server">< /asp:TextBox>     
  16.         
  17.         < asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="查询"      
  18.             Width="65px" />     
  19.         < br />     
  20.         < br />     
  21.         < asp:Label ID="lblCategoryInfo" runat="server" Text="Label">< /asp:Label>     
  22.         < br />     
  23.         < asp:Image ID="Image1" runat="server" />     
  24.          
  25.     < /div>     
  26.     < /form>     
  27. < /body>     
  28. < /html>    

ASP.NET MVC三层架构实例:后台cs代码:

  1. using System;     
  2. using System.Collections;     
  3. using System.Configuration;     
  4. using System.Data;     
  5. using System.Linq;     
  6. using System.Web;     
  7. using System.Web.Security;     
  8. using System.Web.UI;     
  9. using System.Web.UI.HtmlControls;     
  10. using System.Web.UI.WebControls;     
  11. using System.Web.UI.WebControls.WebParts;     
  12. using System.Xml.Linq;     
  13. using northWind3Tier.BusinessLayer;     
  14. using System.IO;     
  15.     
  16. namespace northWind3Tier     
  17. {     
  18.     public partial class CateqoryQuery : System.Web.UI.Page     
  19.     {     
  20.         protected void Page_Load(object sender, EventArgs e)     
  21.         {     
  22.     
  23.         }     
  24.     
  25.         protected void Button1_Click(object sender, EventArgs e)     
  26.         {     
  27.             int categoryID = -1;     
  28.     
  29.             if (TextBox1.Text != "")     
  30.             {     
  31.                 try    
  32.                 {     
  33.                     categoryID = Convert.ToInt32(TextBox1.Text);     
  34.                     //if ((categoryID <  1) || (categoryID > 9))     
  35.                             
  36.                 }     
  37.                 catch    
  38.                 {     
  39.                     Response.Write("< mce:script type="text/javascript">< !--     
  40. alert('只能输入1-9之间的数字')     
  41. // -->< /mce:script>");     
  42.                      return;     
  43.                 }     
  44.             }     
  45.             Category category = new Category();     
  46.             category.LoadData(categoryID);     
  47.     
  48.             lblCategoryInfo.Text = "编号:" + category.CategoryID;     
  49.             lblCategoryInfo.Text += "< BR>名称:" + category.CategoryName;     
  50.             lblCategoryInfo.Text += "< BR>描述:" + category.Description;     
  51.             byte[] image = category.Image;     
  52.             //northwind数据库中的image字段(byte数组)的前面78是无用的,必须剔除才能正常显示图像     
  53.             byte[] temp = new byte[image.Length - 78];     
  54.             Array.Copy(image , 78, temp, 0, image.Length - 78);     
  55.     
  56.             string strPath = "photo/temp.JPG";     
  57.             string strPhotoPath =strPath;     
  58.             //保存图片文件     
  59.             BinaryWriter bw = new BinaryWriter(File.Open(Server.MapPath (strPhotoPath), FileMode.OpenOrCreate));     
  60.             bw.Write(temp);     
  61.             bw.Close();     
  62.             //显示图片     
  63.             this.Image1.ImageUrl = strPath;     
  64.         }     
  65.     }     
  66. }    
  67.  

【编辑推荐】

  1. 利用TemplateField显示GridView中数据的元数据
  2. 使用Calendar控件显示HiredDate字段
  3. 利用TemplateField将姓和名显示在一列中
  4. GridView绑定数据的实现
  5. 通过e.Row实现GridViewRow访问单元格
责任编辑:book05 来源: csdn
相关推荐

2009-07-28 17:25:14

ASP.NET三层结构

2009-07-30 13:07:49

ASP.NET中的三层

2009-07-30 13:30:56

ASP.NET开发模式

2011-04-19 13:53:41

三层架构

2013-01-09 11:00:20

架构开发三层架构.NET架构

2009-07-24 13:20:44

MVC框架ASP.NET

2009-07-31 12:43:59

ASP.NET MVC

2009-04-30 15:56:50

三层架构MVCMVP

2009-07-28 13:06:45

ASP.NET MVC

2009-07-23 14:31:20

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-07-23 15:44:39

ASP.NET MVC

2009-07-22 10:09:59

ASP.NET MVC

2009-07-22 13:24:24

ASP.NET MVC

2012-02-07 10:40:13

MVCJava

2009-11-02 09:14:51

ASP.NET MVC

2012-02-03 09:44:33

.NET

2010-03-26 09:16:44

2010-06-23 15:44:03

ASP.NET MVC

2009-07-24 11:33:12

MVC单元测试ASP.NET
点赞
收藏

51CTO技术栈公众号