ASP.NET高級應用(2)
2024-07-10 12:57:45
供稿:網友
 
,歡迎訪問網頁設計愛好者web開發。三層結構及其應用 
 
   概念及環境 
 
   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> 
 
   我們看到,在這個頁面當中,沒有出現與數據庫交互的語句,這樣我們就很好的把數據操作封裝起來了