转: ASP.NET高级应用 (2)

发表于:2007-06-30来源:作者:点击数: 标签:
三层结构及其应用 概念及环境 ASP.NET中的三层结果 开发 方法,其实其思想跟 Java 的一样。Java中的三层架构为前端的html、Jsp、Servlet,中间层为JavaBean、EJB,后面为 数据库 服务器 。而在ASP.NET中,前段为html、asp、aspx等,中间层为有. vb 、.cs等文
  三层结构及其应用

  概念及环境

  ASP.NET中的三层结果开发方法,其实其思想跟Java的一样。Java中的三层架构为前端的html、Jsp、Servlet,中间层为JavaBean、EJB,后面为数据库服务器。而在ASP.NET中,前段为html、asp、aspx等,中间层为有.vb、.cs等文件编译而成的.dll控件,后面为数据库服务器。

  在我们的三层架构中,我们的数据库层通过中间层来连接以及操作,前端给中间层传递参数,并接受中间层的参数。在我们的ASP.NET中,我们主要关注的是我们的中间层与前端的数据交互。

  我们一般统称中间层为组件,组件可以用.vb编译而成,也可以用.cs文件编译而成。中间层一般为.dll文件。微软的.NET技术在这个方面比他的以前的任何版本都要来的简单,这也是它的一打好处之一。以前我们要注册一个.dll文件,有是注册有是重启动,而在.net上,我们的.dll文件拿来就用,不用再考虑注册的问题。

  在没有Visual stutio.net之前,我们用写成的.bat文件来把.vb和.cs文件编译成.dll文件,在.bat文件里,我们写入编译的文件名称、相关联的名字空间、要编译成的文件名以及对应的命令名称,然后运行就行了。听起来很复杂,这也是很多初学者在编译第一个.dll文件时所害怕的事情。但是做起来很简单的。下面我们举一个例子来说明.bat文件的写法,假设我们有一个文件名为:saidy.vb的文件,我们要把它编译成saidy.dll的文件,其中用到System、System.Data、System.Data.SQL名字空间,我们可以创建一个dblink.bat文件,内容如下:

  vbc /out:..\bin\saidy.dll /t:library /r:system.dll /r:system.data.dll / r:system.data.sql.dll

  dblink.vb

  这是编译.vb程序的命令,如果是编译.cs文件,则命令会是不一样,我们假定有一个saidy.cs的文件,按照上面的要求,我们编译如下:

  cs /out:..\bin\saidy.dll /t:library /r:system.dll /r:system.data.dll / r:system.data.sql.dll
dblink.cs

  我们可以看出来,大部分是一样的。

  当然,如果我们有微软公司的vs.net编程环境,则我们不用这么麻烦,我们可以象编译vb或者vc程序一样方便的编译.dll文件。微软公司的vs.net是一个集大成者,把各种语言整合起来,在这个环境下都可以写出不同语言的程序。具体的应用我们会在专门的章节上介绍的。

  一个基于三层架构的例子

  我们通过具体的例子来说明三层架构的应用,我们建一个小项目来说明这个问题。有时为了安全性,我们通常把与数据库的连接用一个动态连接库文件封装起来,这样我们就要把写数据库连接的.vb或者.cs文件编译成动态连接库.dll文件。甚至我们把对数据库的相关操作页编译成.dll文件。

  下面是我们的与数据库连接以及操作的文件dblink.vb的主要部分,对数据库的连接:

   Dim dbl As SQLConnection

  对数据库的操作,我们把它写在一个方法里面,在返回相应值:
Function getdata() as DataView
Dim sComm as SQLDataSetCommand
Dim sDS as DataSet
Dim sStr as String
dbl = New SQLConnection("server=localhost;uid=sa;password=;database=howff")
sStr = "select * from color"
sComm = new SQLDataSetCommand(sStr,dbl)
sDS = new DataSet()
sComm.FillDataSet(sDS,"color")
Return sDS.Table["color"].DefaultView
End Function



  我们第六个语句就用到上面的与数据库的连接变量,我们这个函数的功能是从表"color"中选出所有的元素,并返回表结构的形式。完整的代码如下:


Imports System
Imports System.Data
Imports System.Data.SQL
@#创建名字空间
Namespace db
@#创建一个类
Public Class dblink
@#建立数据库的连接
Dim dbl As SQLConnection
@#方法
Public Function getdata() As DataView
Dim sComm As SQLDataSetCommand
Dim sDS As DataSet
dbl = New SQLConnection("server=localhost;uid=sa;password=;database=howff")
Dim sStr As String
sStr = "select * from color"
sComm = New SQLDataSetCommand(sStr, dbl)
@#填充数据
sDS = New DataSet()
sComm.FillDataSet(sDS, "color")
@#返回
Return sDS.Tables("color").DefaultView
End Function
End Class
End Namespace
我们再写一个前端掉用页面saidy.aspx,我们首先要引入我们创建的名字空间:

<%@ Import Namespace="db" %>

在页面装入的时候,我们用此方法:
Sub Page_Load(Sender As Object, E As EventArgs)
@#建立一个新的对象
Dim newdb As dblink
newdb = new dblink()
@#数据来源
Products.DataSource = newdb.getdata()
@#数据绑定
Products.DataBind()
End Sub
下面看看我们完整的代码(advanceapp\dblink.aspx):
<%@ Import Namespace="db" %>
<html>
<script language="VB" runat="server">
Sub Page_Load(Sender As Object, E As EventArgs)
@#建立一个新的对象
Dim newdb As dblink
newdb = new dblink()
@#数据来源
Products.DataSource = newdb.getdata()
@#数据绑定
Products.DataBind()
End Sub
</script>
<body style="font: 10pt verdana" bgcolor="CCCCFF">
<BR><BR><BR>
<CENTER>
<h3>.NET->三层架构!</h3>
</CENTER>
<BR><BR>
<CENTER>
<ASP:DataList id="Products" ShowHeader=false ShowFooter=false RepeatColumns="2" RepeatDirection="horizontal" BorderWidth=0 runat="server">
<template name="itemtemplate">
<table>
<tr>
<td width="150" style="text-align:center; font-size:8pt; vertical-align:top;
height:50">
<p>
<%# DataBinder.Eval(Container.DataItem, "id") %> <br>
<%# DataBinder.Eval(Container.DataItem, "name", "{0:C}").ToString() %>
</td>
</tr>
</table>
</template>
</ASP:DataList>
</CENTER>
</body>
</html>

  我们看到,在这个页面当中,没有出现与数据库交互的语句,这样我们就很好的把数据操作封装起来了

原文转自:http://www.ltesting.net