概論
本文將介紹如何創建一個三層應用程序
並且將介紹如何創建一個Web Service服務
ADO
NET創建Windows三層結構應用程序的體系架構如下圖所示
該結構分三個層次
表示層
業務層
數據層
數據層
代表物理數據庫
業務層
負責數據層與表示層之間的數據傳輸
表示層
應用程序的客戶端
它通過業務層來訪問數據庫
表示層所操作的是駐留在內存中的本地數據
當需要更新數據庫數據時
要通過業務層提供的更新方法實現
這樣可以大大提高應用程序的性能
而且
什麼時候更新數據完全由你決定
提高了編程的靈活性
實例:
這裡我們具體做一個實例來看看如何用VB
NET創建三層結構的應用程序
數據庫
我們選擇SQL SERVER 的NorthWind數據庫
業務層
我們創建一個WebService作為中間層
(需要安裝IIS服務)
表示層
我們寫一個Windows Form
第一步
創建WebService
具體步驟如下
新建一個項目
選擇ASP
NET Web服務
命名為
WebService For 業務層
添加兩個Sql DataAdapter
一個為Customer_da
它指向NorthWind數據庫的Customers表
另一個為Order_da
指向Northwind數據庫的Orders表
然後生成一個Typed DataSet(選擇
數據
菜單的
生成數據集
)
命名為
Super_ds
數據庫連接已經完成
下一步我們將考慮它與表示層之間的通信
這裡我們定義兩個方法
一個為
Get_DataSet
它返回一個Super_ds類型的數據集
另一個為
Update_DataSet
它負責更新數據庫數據
方法代碼如下
<WebMethod()> Public Function Get_Dataset() As super_ds
customer_da
Fill(Super_ds
Customers)
order_da
Fill(Super_ds
Orders)
Return Super_ds
End Function
<WebMethod()> Public Sub Update_Dataset()
Super_ds
AcceptChanges()
End Sub
你可以運行測試一下你建立的這個WebService
它將提供兩個方法
返回的DataSet是以XML表示的
業務層的完整代碼如下
Imports System
Web
Services
Public Class Service
Inherits System
Web
Services
WebService
Web Services Designer Generated Code……
<WebMethod()> Public Function Get_Dataset() As super_ds
customer_da
Fill(Super_ds
Customers)
order_da
Fill(Super_ds
Orders)
Return Super_ds
End Function
<WebMethod()> Public Sub Update_Dataset()
Super_ds
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 F
<WebMethod()> Public Function HelloWorld() As String
HelloWorld =
Hello World
End Function
End Class
第二步
創建表示層
具體步驟如下
新建一個Windows應用程序
命名為
Windows Form For 表示層
在窗體上添加一個DataGrid
一個Button
Button
的text為
Load
作用是
從業務層讀取數據
在解決方案窗體中添加Web 引用
將我們自己建立的Web Service for 業務層引入到當前項目中
向Button
的Click事件添加如下代碼
Dim Customer_Ds As New localhost
super_ds()
Dim ser
As New localhost
Service
()
Customer_Ds
Merge(ser
Get_Dataset)
DataGrid
DataSource = Customer_Ds
這裡我們調用了Web Service的Get_DataSet函數
Update_DataSet方法的調用與此完全相同
表示層的完整代碼如下
Imports Data_Access_表示層
Public Class Form
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 Button
As System
Windows
Forms
Button
Friend WithEvents Button
As System
Windows
Forms
Button
Friend WithEvents Button
As System
Windows
Forms
Button
Friend WithEvents Client_DataSet As Data_Access_表示層
localhost
super_ds
Friend WithEvents DataGrid
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
DebuggerStepThrough()> Private Sub InitializeComponent()
Me
Button
= New System
Windows
Forms
Button()
Me
Button
= New System
Windows
Forms
Button()
Me
Button
= New System
Windows
Forms
Button()
Me
Client_DataSet = New Data_Access_表示層
localhost
super_ds()
Me
DataGrid
= New System
Windows
Forms
DataGrid()
CType(Me
Client_DataSet
System
ComponentModel
ISupportInitialize)
BeginInit()
CType(Me
DataGrid
System
ComponentModel
ISupportInitialize)
BeginInit()
Me
SuspendLayout()
Button
Me
Button
Location = New System
Drawing
Point(
)
Me
Button
Name =
Button
Me
Button
TabIndex =
Me
Button
Text =
load
Button
Me
Button
Location = New System
Drawing
Point(
)
Me
Button
Name =
Button
Me
Button
TabIndex =
Me
Button
Text =
update
Button
Me
Button
Location = New System
Drawing
Point(
)
Me
Button
Name =
Button
Me
Button
TabIndex =
Me
Button
Text =
clear
Client_DataSet
Me
Client_DataSet
DataSetName =
Client_DataSet
Me
Client_DataSet
Locale = New System
Globalization
CultureInfo(
zh
CN
)
Me
Client_DataSet
Namespace =
DataGrid
Me
DataGrid
DataMember =
Me
DataGrid
Location = New System
Drawing
Point(
)
Me
DataGrid
Name =
DataGrid
Me
DataGrid
Size = New System
Drawing
Size(
)
Me
DataGrid
TabIndex =
Form
Me
AutoScaleBaseSize = New System
Drawing
Size(
)
Me
ClientSize = New System
Drawing
Size(
)
Me
Controls
AddRange(New System
Windows
Forms
Control() {Me
DataGrid
Me
Button
Me
Button
Me
Button
})
Me
Name =
Form
Me
Text =
Form
CType(Me
Client_DataSet
System
ComponentModel
ISupportInitialize)
EndInit()
CType(Me
DataGrid
System
ComponentModel
ISupportInitialize)
EndInit()
Me
ResumeLayout(False)
End Sub
#End Region
Private Sub Button
_Click(ByVal sender As System
Object
ByVal e As System
EventArgs) Handles Button
Click
Dim Customer_Ds As New localhost
super_ds()
Dim ser
As New localhost
Service
()
Customer_Ds
Merge(ser
Get_Dataset)
DataGrid
DataSource = Customer_Ds
End Sub
End Class
總結
可見
表示層窗體上完全沒有數據庫連接控件
它與數據庫的連接任務是通過業務層來完成的
這樣
程序的結構更加清晰
當然業務層的實現也可以用其他方法
比如
寫一個自己的類來完成與數據庫的數據傳輸
From:http://tw.wingwit.com/Article/program/net/201311/12618.html