科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VB.Net创建一个三层的数据库应用程序

VB.Net创建一个三层的数据库应用程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

VB.Net创建一个三层的数据库应用程序

作者:newhong 来源:赛迪网技术社区 2007年11月27日

关键字: 数据库 创建

  • 评论
  • 分享微博
  • 分享邮件
本文将介绍如何创建一个三层应用程序,并且将介绍如何创建一个Web Service服务。 n~<6Kv>P  
MB{#hhq}  
  ADO.NET创建Windows三层结构应用程序的体系架构如下图所示: " AU,9ne>  
该结构分三个层次:表示层、业务层、数据层。 OjUreRah  
exiSH2   
  数据层:代表物理数据库。 n(mO4 ,a2  
2tMLEH;  
  业务层:负责数据层与表示层之间的数据传输。 j3 8tm t  
*K*V6:x  
  表示层:应用程序的客户端,它通过业务层来访问数据库。 e|@tNULT/  
lLYwhK^_  
  表示层所操作的是驻留在内存中的本地数据,当需要更新数据库数据时,要通过业务层提供的更新方法实现。这样可以大大提高应用程序的性能,而且,什么时候更新数据完全由你决定,提高了编程的灵活性。 Z~HR_D1  
m{;= vD  
  2.实例: zS R!j)x2  
[x`o+6$tG  
  这里我们具体做一个实例来看看如何用VB.NET创建三层结构的应用程序。 7UK&  
5%-a_?KiwD  
  数据库:我们选择SQL Server 的NorthWind数据库。 kG3]Q*>Ci|  
m -bf@l x1  
  业务层:我们创建一个WebService作为中间层。(需要安装IIS服务) $:yi@m+fZ  
:> ! SAH  
  表示层:我们写一个Windows Form SVsufs6</  
第一步:创建WebService。 ay%*|k-@e  
,:9!=NXmq  
  具体步骤如下: 4W7maW  
{ M2@ *  
  1.新建一个项目,选择ASP.NET Web服务,命名为:”WebService For 业务层”。 &-5n QN:  
2.添加两个Sql DataAdapter,一个为Customer_da,它指向NorthWind数据库的Customers表,另一个为Order_da,指向Northwind数据库的Orders表。 _]pq98Ce&  
Lw7Ym[  
  3.然后生成一个Typed DataSet(选择“数据”菜单的“生成数据集”),命名为:Super_ds. %@nN$zE~  
l_w0r~TF1  
  4.数据库连接已经完成,下一步我们将考虑它与表示层之间的通信,这里我们定义两个方法。一个为:Get_DataSet,它返回一个Super_ds类型的数据集,另一个为:Update_DataSet,它负责更新数据库数据, 方法代码如下: {^J;yQ  
sR606}1.'  
tQ~$yqj#  
e-)B<-byP+  
<WebMethod()> Public Function Get_DataSet() As super_ds Im|h`vEf  
N'+GB/  
    customer_da.Fill(Super_ds1.Customers) %NYo R%  
uv&_vg0J  
    order_da.Fill(Super_ds1.Orders) aDtY u^sE  
rk],[X/9)  
    Return Super_ds1 !c9L|3I&_  
K"FB9c-  
  End Function 590?`)Ee {  
cVU\4  
<WebMethod()> Public Sub Update_DataSet() ;`Gkdon_^J  
$cZ5[>  
    Super_ds1.AcceptChanges() $a@wW?  
h J&ZmF  
End Sub  ?\'Pe)*  
P1[9gAy  
v~&-p"OA'/  
  你可以运行测试一下你建立的这个WebService。它将提供两个方法。返回的DataSet是以XML表示的。 $*tak<m$z  
7SjA{n|9  
  业务层的完整代码如下: *4^{!|%<y  
lVDc Zc"  
Imports System.Web.Services 0/Ql{%  
+|'}kOAa  
Public Class Service1 YWU|db0i.5  
kj</jM<p  
Inherits System.Web.Services.WebService g(RJ}W2L>  
uzR(8lA  
‘Web Services Designer Generated Code……. c};hyqj3e  
X-r@Rn/M  
<WebMethod()> Public Function Get_DataSet() As super_ds h/4l=#%  
XBw7HS[ H-  
    customer_da.Fill(Super_ds1.Customers) iJ*oTL>M  
tG?tc]~  
    order_da.Fill(Super_ds1.Orders) wCgn5u$  
^YSSfX4`  
    Return Super_ds1 K n5U&1'  
Kym8(ok  
  End Function BD_D{ixhl  
v<v!y[r  
<WebMethod()> Public Sub Update_DataSet() '9wl %4edn  
yJ_Iy{RE  
    Super_ds1.AcceptChanges() >/j)ko Z%  
uTzMkZ{e  
  End Sub u&{kb3#  
<|O7sc i  
  ' WEB SERVICE EXAMPLE "pA `[O|.  
MLVi|  
  ' The HelloWorld() example service returns the string Hello World. } jJ0==o  
JNZA6M  
  ' To build, uncomment the following lines then save and build the project. 7pawX!}@  
r<oStzkFO  
  ' To test this web service, ensure that the .asmx file is the start page >T+c_|  
JX+t7"|  
  ' and press F5. NiWn|Q8]]  
n|@"$  
  ' |9W[ > 7<  
jbd|X3  
  '<WebMethod()> Public Function HelloWorld() As String T2^:Nb)jJ  
wq'vyQ  
  ' HelloWorld = "Hello World" Hkux)>i`  
DL:!%_  
  ' End Function }gGkkm$n  
nSjkPy@  
End Class  r=h^h?_0  
第二步:创建表示层 K~Nz@t/^  
|cEk]Lo\~  
  具体步骤如下: u"?@ { AA  
pC_j6;nn.  
  1.新建一个Windows应用程序,命名为:“Windows Form For 表示层”。 8fL"Zs  
zziC.C  
  2.在窗体上添加一个DataGrid,一个Button,Button1的text为“Load”,作用是:从业务层读取数据 LJLYG/  
3.在解决方案窗体中添加Web 引用,将我们自己建立的Web Service for 业务层引入到当前项目中。 z)9SCT(  
1(cRC%u'`  
  4.向Button1的Click事件添加如下代码: $8E2 W  
&DfM{YzVj  
yC>BXVFB  
D8Orz#]ppe  
   Dim Customer_Ds As New localhost.super_ds() ;/@L 7|I  
3AupDp  
    Dim ser1 As New localhost.Service1() of[h3h*#  
PIMDE~1  
    Customer_Ds.Merge(ser1.Get_DataSet) }' ,R%3  
0V]0B{  
    DataGrid1.DataSource = Customer_Ds  U8/"j,Q(S  
Gw']L JU1  
\@|/:E  
  这里我们调用了Web Service的Get_DataSet函数,Update_DataSet方法的调用与此完全相同。 fm:iII+  
%>U4;\Vd  
  表示层的完整代码如下: /@<ZwWqu~R  
P{!^)..|  
Imports Data_ACCESS_表示层 WxqiEwM?  
;>(Cem  
Public Class Form1 ?d`TH,o  
nu[dI;  
  Inherits System.Windows.Forms.Form /X%| L  
RA)^]Vg+  
#Region " Windows Form Designer generated code " )H &N2J!wT  
vGt*y% @3  
  Public Sub New() 1w4XojwB  
:Mrlr.UAq  
    MyBase.New() zA\o):  
,J0\Y  
    'This call is required by the Windows Form Designer. JyT=vR5^h  
GDg,<  
    InitializeComponent() sZH[p0  
/(TCi%[mc  
    'Add any initialization after the InitializeComponent() call m|/Yf)A:  
|zG!ps]K=  
  End Sub c:"4)KVf  
B$6d=@BbY  
  'Form overrides dispose to clean up the component list. ].M+p@{  
;ef0vkk=z  
  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) h_baNW*  
G;B[O6/zr  
    If disposing Then pDT %r1d9  
KSRa=>*$  
      If Not (components Is Nothing) Then 8A0 [aN  
h}\};,h9=  
        components.Dispose() 8p- #@ J  
}kj5;~ Y  
      End If o1{U]A%S  
WKRI~uj0d  
    End If "@'5==s  
:.Zq4'Q P  
    MyBase.Dispose(disposing) `@A9@NH  
f]A5@b  
  End Sub _On _|  
c7m 1SMaS  
  Friend WithEvents Button1 As System.Windows.Forms.Button OPV"V@-v^  
:sDCm[  
  Friend WithEvents Button2 As System.Windows.Forms.Button *If\{  
o@eWcE  
  Friend WithEvents Button3 As System.Windows.Forms.Button QPYgZ1O o  
.ET?Ylnx  
    Friend WithEvents Client_DataSet As Data_ACCESS_表示层.localhost.super_ds |RuP]vK`  
XjQ.xZ}+  
  Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid orR[wIN0  
iIP6lMo  
  'Required by the Windows Form Designer Lx\c*/  
WBFjYY{  
  Private components As System.ComponentModel.Container 1CuiV92:  
\WSo e7~  
  'NOTE: The following procedure is required by the Windows Form Designer t\l9Ft  
$f-EKuH~A  
  'It can be modified using the Windows Form Designer. {7ZW$e  
@dRt/ )wc  
  'Do not modify it using the code editor. tlG(J^W  
!SEx"f|F  
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() #JFc!z R  
\HZE/ 8D{  
    Me.Button1 = New System.Windows.Forms.Button() jzQi3=t  
}ZU 7(8  
    Me.Button2 = New System.Windows.Forms.Button() d)aEvw= /D  
# |"@  
    Me.Button3 = New System.Windows.Forms.Button() E*(_ 6_2S  
+\2hbN  
    Me.Client_DataSet = New Data_ACCESS_表示层.localhost.super_ds() 95 tJ xCy  
T#w"1BXvmZ  
    Me.DataGrid1 = New System.Windows.Forms.DataGrid() *l<#$gpNY  
?ML7 I~C   
    CType(Me.Client_DataSet, System.ComponentModel.ISupportInitialize).BeginInit() /<JSuO:jf  
| IO,dkF2{  
    CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).BeginInit() yR.+oxH  
t`>4)XUS  
    Me.SuspendLayout() V`50&<I  
??`Q'X`  
    ' 7!24t<q00S  
}AcB7Um%9  
    'Button1 XZ?TdD&  
]SRv1L7  
    ' 3HMs(x}  
tTJfG3-Yn  
    Me.Button1.Location = New System.Drawing.Point(88, 360) v43 r/1V=5  
abX=)*Y-5Z  
    Me.Button1.Name = "Button1" 8$_"S -c1  
; l*^  
    Me.Button1.TabIndex = 0 8Y-*LL<}s  
if1~nD%C  
    Me.Button1.Text = "load" EsZF!\$qPC  
4n La'6ux  
    ' 9lBNKhf6`  
%:0</  
    'Button2 .O\ )Y  
6UwfiF)R\  
    ' ?m0OZ< {  
<RN< ^  
    Me.Button2.Location = New System.Drawing.Point(232, 360) qX .T|@E  
,u48S s  
    Me.Button2.Name = "Button2" #s]?|a]'  
vKF>;-<|  
    Me.Button2.TabIndex = 1 ,S4,BU  
mA;/:@;z{  
    Me.Button2.Text = "update" g _ ^  
C\CKsXb#  
    ' D9['"\  
HirOf3i  
    'Button3 L;\qRE  
V0g(QTD  
    ' =5N{e<07Q  
 ^HBiSy  
    Me.Button3.Location = New System.Drawing.Point(376, 360) S;~9nb\  
p~]e\  
    Me.Button3.Name = "Button3" ;<U =X  
>BoVm o0  
    Me.Button3.TabIndex = 2 [k2Y.E`%3m  
_O K`v  
    Me.Button3.Text = "clear" wFm[IN(  
0+Pt.2ca  
    ' W#i(nE}\  
h( L?/n6L  
    'Client_DataSet X"'HspFh  
nU~$o6ZMM  
    ' mFM^n7 %  
V&t#m\{N  
    Me.Client_DataSet.DataSetName = "Client_DataSet" 3<63e.J-  
<`rqsdT@H  
    Me.Client_DataSet.Locale = New System.Globalization.CultureInfo("zh-CN") "(p- .kDt  
ylfO5^;>  
    Me.Client_DataSet.Namespace = "http://www.tempuri.org/CustomerDs.xsd" > _8CWM  
cREb1'iL  
    ' O8DG]'63  
K,CH;a  
    'DataGrid1 MW oW_G'!  
.9E/S.ya  
    ' ?gzDD2#kk  
U/@2 an+^|  
    Me.DataGrid1.DataMember = "" [LsSI3JR -  
cU$;l~  
    Me.DataGrid1.Location = New System.Drawing.Point(40, 56) (|F1,  
8F@p^<|)  
    Me.DataGrid1.Name = "DataGrid1" a"6fPgS/  
Q/8c  
    Me.DataGrid1.Size = New System.Drawing.Size(480, 264) 9]RXm%fk  
Qe t1@`  
    Me.DataGrid1.TabIndex = 3 q8xCl  
t-^cEj;  
    ' de**C34Si  
H=>D A78C3  
    'Form1 G7W"g0SX  
J!C0(=  
    ' u_P U9ZBD  
{=>0aHJ  
    Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14) ?-T8+yMt  
KthtYWe  
    Me.ClientSize = New System.Drawing.Size(568, 429) UX '>Z Kh  
!jlbs_<+en  
    Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.DataGrid1, Me.Button3, Me.Button2, Me.Button1}) zL?RO7H  
;fAw9_ZH  
    Me.Name = "Form1" YQ:X\92  
MXn?Ho;  
    Me.Text = "Form1" @;O8O?3`  
z">fM6  
    CType(Me.Client_DataSet, System.ComponentModel.ISupportInitialize).EndInit() zAaR&|9&W  
Z (gfFD6&  
    CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).EndInit() M_ WG=R  
+{0bh)=  
    Me.ResumeLayout(False) UwB8v96<v  
95?;d/zP  
  End Sub }v99;"8h=  
Pu*HO  
#End Region FjM72qK4O  
A$ xDZ;z  
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ptt >S  
e*Nn;1$|G  
      Dim Customer_Ds As New localhost.super_ds() &e;;  
B.@6  
      Dim ser1 As New localhost.Service1() hjYIY\Y  
l->X_B  
      Customer_Ds.Merge(ser1.Get_DataSet) *0p6J  
|)Ji)1B3  
      DataGrid1.DataSource = Customer_Ds n6F^C&'rH  
`hZ E67G  
      End Sub r3p*'*{  
rzZ Xx d  
  End Class  gE7_J6p_  
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章