VB.NET的编写方式和其他语言相比有许多不同之处,比如在构建三层架构方面。我们就可以通过本文介绍的内容对此进行一个详细的解读。我们主要介绍的是VB.NET三层数据结构的实现,以及将介绍如何创建一个Web Service服务。#t#
该结构分三个层次:表示层、业务层、数据层。
数据层:代表物理数据库。
业务层:负责数据层与表示层之间的数据传输。
表示层:应用程序的客户端,它通过业务层来访问数据库。
表示层所操作的是驻留在内存中的本地数据,当需要更新数据库数据时,要通过业务层提供的更新方法实现。这样可以大大提高应用程序的性能,而且,什么时候更新数据完全由你决定,提高了编程的灵活性。
VB.NET三层数据结构实例:
这里我们具体做一个实例来看看如何用VB.NET三层数据结构的应用程序。
数据库:我们选择SQL SERVER 的NorthWind数据库。
业务层:我们创建一个WebService作为中间层。(需要安装IIS服务)
表示层:我们写一个Windows Form
第一步:创建WebService.
VB.NET三层数据结构具体步骤如下:
1. 新建一个项目,选择ASP.NET Web服务,命名为:“WebService For 业务层”。
2. 添加两个Sql DataAdapter,一个为Customer_da,它指向NorthWind数据库的Customers表,另一个为Order_da,指向Northwind数据库的Orders表。
3. 然后生成一个Typed DataSet(选择“数据”菜单的“生成数据集”),命名为:Super_ds.
4. 数据库连接已经完成,下一步我们将考虑它与表示层之间的通信,这里我们定义两个方法。一个为:Get_DataSet,它返回一个Super_ds类型的数据集,另一个为:Update_DataSet,它负责更新数据库数据, 方法代码如下:
- < WebMethod()> Public
Function Get_Dataset()
As super_ds- customer_da.Fill
(Super_ds1.Customers)- order_da.Fill(Super_ds1.Orders)
- Return Super_ds1
- End Function
- < WebMethod()> Public
Sub Update_Dataset()- Super_ds1.AcceptChanges()
- End Sub
你可以运行测试一下你建立的这个WebService.它将提供两个方法。返回的DataSet是以XML表示的。
业务层的完整代码如下:
- Imports System.Web.Services
- Public Class Service1
- Inherits System.Web.Services
.WebService- ‘Web Services Designer
Generated Code……。- < WebMethod()> Public Function
Get_Dataset() As super_ds- customer_da.Fill(Super_ds1.Customers)
- order_da.Fill(Super_ds1.Orders)
- Return Super_ds1
- End Function
- < WebMethod()> Public Sub
Update_Dataset()- Super_ds1.AcceptChanges()
- End Sub
- ' WEB SERVICE EXAMPLE
- ' The HelloWorld() example service
returns the string Hello World.- ' To build, uncomment the following
lines then save and build the project.- ' To test this web service, ensure
that the .asmx file is the start page- ' and press F5.
- '
- '< WebMethod()> Public Function
HelloWorld() As String- ' HelloWorld = "Hello World"
- ' End Function
- End Class
VB.NET三层数据结构之创建表示层
具体步骤如下:
1. 新建一个Windows应用程序,命名为:“Windows Form For 表示层”。
2. 在窗体上添加一个DataGrid,一个Button,Button1的text为“Load”,作用是:从业务层读取数据。
3. 在解决方案窗体中添加Web 引用,将我们自己建立的Web Service for 业务层引入到当前项目中。
4. 向Button1的Click事件添加如下代码:
- Dim Customer_Ds As New
localhost.super_ds()- Dim ser1 As New local
host.Service1()- Customer_Ds.Merge
(ser1.Get_Dataset)- DataGrid1.DataSource
= Customer_Ds
这里我们调用了Web Service的Get_DataSet函数,Update_DataSet方法的调用与此完全相同。
#p#
表示层的完整代码如下:
- Imports Data_Access_表示层
- Public Class Form1
- Inherits System.Windows.Forms.Form
- #Region " Windows Form Designer
generated code "- Public Sub New()
- MyBase.New()
- 'This call is required by the
Windows Form Designer.- InitializeComponent()
- 'Add any initialization after the
InitializeComponent() call- End Sub
- 'Form overrides dispose to clean
up the component list.- Protected Overloads Overrides Sub
Dispose(ByVal disposing As Boolean)- If disposing Then
- If Not (components Is Nothing) Then
- components.Dispose()
- End If
- End If
- MyBase.Dispose(disposing)
- End Sub
- Friend WithEvents Button1 As
System.Windows.Forms.Button- Friend WithEvents Button2 As
System.Windows.Forms.Button- Friend WithEvents Button3 As
System.Windows.Forms.Button- Friend WithEvents Client_DataSet
As Data_Access_表示层。localhost.super_ds- Friend WithEvents DataGrid1 As
System.Windows.Forms.DataGrid- 'Required by the Windows Form Designer
- Private components As System.
ComponentModel.Container- 'NOTE: The following procedure is
required by the Windows Form Designer- 'It can be modified using the
Windows Form Designer.- 'Do not modify it using the code editor.
- < System.Diagnostics.Debugger
StepThrough()> Private Sub
InitializeComponent()- Me.Button1 = New System.
Windows.Forms.Button()- Me.Button2 = New System.
Windows.Forms.Button()- Me.Button3 = New System.
Windows.Forms.Button()- Me.Client_DataSet = New
Data_Access_表示层。localhost
.super_ds()- Me.DataGrid1 = New System.Windows.
Forms.DataGrid()- CType(Me.Client_DataSet, System
.ComponentModel.ISupportInitialize)。
BeginInit()- CType(Me.DataGrid1, System.
ComponentModel.ISupportInitialize)。
BeginInit()- Me.SuspendLayout()
- '
- 'Button1
- '
- Me.Button1.Location = New System.
Drawing.Point(88, 360)- Me.Button1.Name = "Button1"
- Me.Button1.TabIndex = 0
- Me.Button1.Text = "load"
- '
- 'Button2
- '
- Me.Button2.Location = New System.
Drawing.Point(232, 360)- Me.Button2.Name = "Button2"
- Me.Button2.TabIndex = 1
- Me.Button2.Text = "update"
- '
- 'Button3
- '
- Me.Button3.Location = New System
.Drawing.Point(376, 360)- Me.Button3.Name = "Button3"
- Me.Button3.TabIndex = 2
- Me.Button3.Text = "clear"
- '
- 'Client_DataSet
- '
- Me.Client_DataSet.DataSetName =
"Client_DataSet"- Me.Client_DataSet.Locale = New
System.Globalization.CultureInfo("zh-CN")- Me.Client_DataSet.Namespace =
"http://www.tempuri.org/CustomerDs.xsd"- '
- 'DataGrid1
- '
- Me.DataGrid1.DataMember = ""
- Me.DataGrid1.Location = New
System.Drawing.Point(40, 56)- Me.DataGrid1.Name = "DataGrid1"
- Me.DataGrid1.Size = New System.
Drawing.Size(480, 264)- Me.DataGrid1.TabIndex = 3
- '
- 'Form1
- '
- Me.AutoScaleBaseSize = New
System.Drawing.Size(6, 14)- Me.ClientSize = New System.
Drawing.Size(568, 429)- Me.Controls.AddRange(New
System.Windows.Forms.Control()
{Me.DataGrid1, Me.Button3,
Me.Button2, Me.Button1})- Me.Name = "Form1"
- Me.Text = "Form1"
- CType(Me.Client_DataSet,
System.ComponentModel.
ISupportInitialize)。EndInit()- CType(Me.DataGrid1, System.
ComponentModel.ISupportInitialize)。EndInit()- Me.ResumeLayout(False)
- End Sub
- #End Region
- Private Sub Button1_Click(ByVal
sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click- Dim Customer_Ds As New localhost.super_ds()
- Dim ser1 As New localhost.Service1()
- Customer_Ds.Merge(ser1.Get_Dataset)
- DataGrid1.DataSource = Customer_Ds
- End Sub
- End Class
总结:可见,VB.NET三层数据结构中的表示层窗体上完全没有数据库连接控件,它与数据库的连接任务是通过业务层来完成的,这样,程序的结构更加清晰,当然业务层的实现也可以用其他方法,比如:写一个自己的类来完成与数据库的数据传输。