单层体系结构到三层体系结构的转变

本文对比了ASP.NET中单层与三层体系结构在处理图像读取方面的实现方式。单层架构直接在页面中进行数据库操作,而三层架构分为界面层、表示层和数据层,各层职责明确,通过业务层调用数据层的方法获取数据。
 

----------单层体系结构

<%@ Page Language="vb" %><%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.Data.SqlClient" %>

<HTML>

<HEAD>

<script runat=server>

Public Sub Page_Load(sender As Object, e As EventArgs)

  Dim strImageID as String = Request.QueryString("id")

  Dim myConnection As New SqlConnection("Data Source=.;Initial Catalog=mxh;User Id=sa;Password=;")

  Dim myCommand As New SqlCommand("Select PersonImageType, PersonImage from Person Where PersonID=" _

    + strImageID, myConnection)

  Try

    myConnection.Open()

    Dim myDataReader as SqlDataReader

    myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)

    Do While (myDataReader.Read())

    Response.ContentType = myDataReader.Item("PersonImageType")

    Response.BinaryWrite(myDataReader.Item("PersonImage"))

    Loop

    myConnection.Close()

    Catch SQLexc As SqlException

  End Try

End Sub   

</script>

</HEAD>

<body>

<form runat="server" ID="Form1"></form>

</body></HTML>

 

----------三层体系结构

---界面层

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="ReadImage.aspx.vb" Inherits="ShopGoByGo.WebModules.Product.Web.ReadImage" %>

<HTML>

       <HEAD>

       </HEAD>

       <body><form runat="server" ID="Form1">

                     <FONT face="宋体"></FONT>

              </form></body></HTML>

      

---表示层

Public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            Dim productImagesClass As New ProductBusiness.Product(Request.QueryString("id"))

            Dim myDataReader As SqlDataReader = productImagesClass.GetProductImage()

            Do While (myDataReader.Read())

                Response.BinaryWrite(myDataReader.Item("ProductPicture"))

            Loop

        End Sub

 

 

---业务层

#Region "返回指定产品的产品Product_First表里的图片"

        Public Function GetProductImage() As SqlDataReader

            Dim theProduct As New Data.Product(mySettings.ConnectionString)

            Return theProduct.GetProductImage(myProductId)

        End Function

#End Region

 

 

---数据层

#Region "根据指定的ProductID返回产品的图片"

        Public Function GetProductImage(ByVal productId As Integer) As SqlDataReader

            ' 创建参数

            Dim parameters As SqlParameter() = { _

              New SqlParameter("@ProductId", SqlDbType.Int, 4)}

            parameters(0).Value = productId

            Dim products As SqlDataReader

            Try

                products = Me.ExecuteReader(ConnectionString, CommandType.StoredProcedure, "sp_Product_GetProductImage", parameters)

                Return products

            Finally

            End Try

        End Function

#End Region

 

 

---存储过程

ALTER PROCEDURE sp_Product_GetProductImage

@ProductID int

AS

     Select  ProductPicture from Product_First Where ProductID=@ProductID

     RETURN

转载于:https://www.cnblogs.com/xzcastle/archive/2006/01/17/319105.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值