电竞比分网-中国电竞赛事及体育赛事平台

分享

ASP.net(VB)編程入門進階

 趨明 2012-02-16
 
2007年12月05日 星期三 下午 3:25

安裝運行.net需要的軟件

前言:首先對DM編程區(qū)的朋友們說聲,您好,辛苦了,因為我感到如果沒有興趣的話,每天寫呀寫呀,分析呀分析呀,確實很累的,我在今年5月份asp入了門.在這里泡了2個月,技術(shù)有所提高,然后不小心踏入了不歸路---------水區(qū),后來由于某些原因,做了幾個小系統(tǒng),只是稍微掌握的系統(tǒng)了一點,在7月-9月的這段時間,由于某些原因把c++拿出來學(xué)了學(xué),基本掌握.不要說我賣弄,或者說感到我說的基礎(chǔ)的話,你可以馬上閃人,我還是那句話,要務(wù)實,我不說理論,因為我始終相信實踐中經(jīng)驗的來的就是理論,如果你每天抱著看什么什么原理的話,很難掌握的,前端時間有人說.net久久不能入門,我很是懷疑他的方法或者基礎(chǔ),坦白的說,我個人感覺學(xué).net還是要些基礎(chǔ)的,什么編程都不會的別學(xué),先搞定一門再說,我這里推薦一本書:《beginning asp.net 1.1with vb.net 2003》就是《asp.net 1.1入門經(jīng)典--vb.net2003編程篇》這本書講的很不錯,適合初學(xué)者。

個人基礎(chǔ):asp基本掌握,c++基本掌握;
電腦配置:6.5G硬盤+128M內(nèi)存,其他設(shè)備都是類似的配置+windows2000;

軟件要求吧:

1、MDAC 2.7(微軟數(shù)據(jù)庫引擎)大約5.01M;
2、Microsoft.NET framework1.1大約23.1M,比這大正常,版本問題吧;
3、NET_Framework_SDK_1.1_CHS大約116M.和這大小差不多;

你要問那里下載的話就在google輸入以上英文,對應(yīng)的很多,自己選擇,然后按照1-2-3的順序安裝,安裝完畢了在控制面板---管理工具--生成Microsoft .NET Framework 1.1 Configuration和 Microsoft .NET Framework 1.1 Wizards,這說明你的,net服務(wù)器的環(huán)境已經(jīng)配置的差不多了,如果你感到你的計算機很不錯的話就裝上,就裝上Visual Studio 2005 Express 先奢侈一下吧,如果你想咱們快寫進行,就裝上webmatrix 就行了,它大約1.1M,asp.net在web服務(wù)器IIS下運行的,也可以在webmatrix下運行的,安裝這些完畢了(我假定你已經(jīng)裝了至少很我一樣多的東西,webmatrix你也安裝了)。

現(xiàn)在好像沒什么要我們操心的了,啟動webmatrix,會彈出:

創(chuàng)建新文件:
1、絕對本地路徑,你自己選;
2、名稱你自己寫;
3、language:visual basic.net ;
c#的過短時間我仔細看看怎么轉(zhuǎn)變,再說,這種軟件你應(yīng)該很熟悉了,點擊ok了進入編寫區(qū):

編輯區(qū)下面的4個選項:Design / html / code all
design是可視化設(shè)計 / html是可視化生成的html代碼 / code是.net將要運行的代碼 ,它其有3中插入方式:
1、內(nèi)聯(lián)代碼<%%>
2、<script>標(biāo)記
3、服務(wù)器控件

現(xiàn)在就在all視圖下寫入一下源碼:

<%@ Page Language="VB" %>
<script runat="server">

     sub page_load()
     start.text="we study asp.net on this site."
     end sub

</script>
<html>
<head>
</head>
<body>
     <form runat="server">
         <asp:label id="start" runat="server" />
     </form>
</body>
</html>

然后保存,點擊上邊的中間的圖標(biāo):

看路徑確定,它將啟動webmatrix,然后轉(zhuǎn)到 http://localhost:8080 下面,同時你的電腦右邊彈出一個很酷的提示框,大體說.net服務(wù)已經(jīng)啟動,你在瀏覽器中將看到:

we study asp.net on this site.

這說明了2件事情:
1、你的.net服務(wù)器配置好了,就等你寫代碼了;
2、你很聰明的操作了,net的安裝過程了;

當(dāng)然,如果你已經(jīng)安裝了IIS的話就可以在瀏覽器中輸入網(wǎng)址就像打開asp文件那樣可以打開aspx文件的并運行之了,這是令人興奮的。

前言:當(dāng)你就像我想象的那樣安裝.net完畢的話,今天也許你躍躍欲試的想馬上操作數(shù)據(jù)庫...編輯...頁面生成.....等了,你在ASP里面熟悉的操作都想用.net搞定.那我先要買個關(guān)子,你也許已經(jīng)有了VB的基礎(chǔ)了,也許asp熟練掌握了....如果你認為.net的變量你不看規(guī)則不太習(xí)慣的話,還是有必要靜下心來,先看看.net(vb)中是如何操作的,其實是大同小異的,另外控件大家想必知道,<input type="text">這就是html中的控件,正因為有了這些東西so程序員才能收集信息反饋顯示.....,下面我簡要的介紹一下,其實我也感覺沒有必要把每個控件的屬性都知道的,如果你感興趣的話在webmatrix的視圖里面隨便拉個左邊的就去看看源碼就知道這是什么控件了,我就隨便說說幾個非常常用的,這寫介紹你可以不看的,只看變量就行的。

控件

現(xiàn)看看控件吧,所有的web控件都必須有2個屬性,第一個當(dāng)然就是ranat="server",它告訴asp.net在服務(wù)器上處理控件,并為控件執(zhí)行所有的asp.net的功能,包括狀態(tài)的創(chuàng)建.第二個屬性是名稱ID="mycontrolname"這就像人的身份證一樣,在代碼中指定名稱,引用該控件,看看這個asp.net和html窗口標(biāo)記府的比較,表格來自上面書籍的P56頁,但不全。

asp.net控件 對應(yīng)的html窗口標(biāo)記
<asp:label> <span><div>
<asp:listbox> <select>列表
<asp:Dropdownlist> <select>單選
<asp:textbox> <input type="text">
<asp:radiobuttom><asp:radiobuttomlist> <input type="redio">
<asp:checkbox><asp:checkboxlist> <input type="checkbox">
<asp:buttom> <input type="submit">

大概就是這幾個比較常用,發(fā)現(xiàn)沒asp.net的控件都是類型前面有<asp:>,這是asp.net專用的,也就是說這是用于server服務(wù)的asp.net控件,那么,html在aspx文家中能運行么?能,好的很,因為所有asp.net的web控件都轉(zhuǎn)變?yōu)閔tml的了,如下aspx的源碼:


<%@ Page Language="VB" %>
<script runat="server">

     ' Insert page code here
     '

</script>
<html>
<head>
</head>
<body>
     <form runat="server">
         <asp:Label id="labs" runat="server" >Label</asp:Label>
         <BR/><INPUT NAME="html" />
         <!-- Insert content here -->
     </form>
</body>
</html>

在服務(wù)其上運行生成的文件源碼是:

<html>
<head>
</head>
<body>
     <form name="_ctl0" method="post" action="p56.aspx" id="_ctl0">
<input type="hidden" name="__VIEWSTATE" value="dDwtMTU3ODAzNTQ4MDs7Pv3wu7xxzJOPloshG4oWx/rQLw6S" />

         <span id="labs">Label</span>
         <BR/><INPUT NAME="html" />
         <!-- Insert content here -->
     </form>
</body>
</html>

另外,asp.net的控件被asp.net添加了name的額外標(biāo)記符,value值也是變?yōu)橐粋€很難認識的字符串,這個value值........我也看不懂,但這不影響任何事情。

昨天我用了一個page_load事件控制label的text屬性的,page_load是加載aspx文件.net先解釋的事件,這就和window.onload差不多吧,以后慢慢說.看看它是怎么控制的:

sub page_load()
message1.text="i am message1"
message2.text="i am message2"
end sub

這就加載了message1的text顯示為i am message1,這就是一個簡單的.net里面的web控件。

另外,再看看<asp:Dropdownlist>控件吧。啟動webmatrix,創(chuàng)建一個新文件p56.aspx,選擇design視圖,然后在左邊選擇dropdownlist控件:

把它選中用鼠標(biāo)拉到界面上,就像DM里面一樣的.單擊,然后在右邊選擇:

Items,它控制的是下拉選項項目,點擊最右邊的幾個小點點..

彈出的對話框中選add,在寫上選項名稱id,value,點擊Ok。
同理添加一個submit按鈕,在properties里面設(shè)置一下背景,邊框呀什么的,然后啟動狀態(tài)欄中間的箭頭按鈕在瀏覽器中看看,效果:

是不是很酷?不急,還沒有完,選all視圖,在<script runat="server">:

<script runat="server">
    
     sub page_load()
    
    
     if page.ispostback then
     message.text="you choice the web site of:"+dropdownlist1.selecteditem.value
     end if
    
     end sub

下面添加一個sub事件相應(yīng)按鈕選項,如果頁面已經(jīng)提交ispostback就返回true,否則返回false。當(dāng)然也要添加一個label,id命名為message,okok,現(xiàn)在看看效果:

嗯,它就是這樣相應(yīng)的,看看所有的這個源碼:

以下是引用片段:

<%@ Page Language="VB" %>
<script runat="server">

     ' Insert page code here
    
    
     sub page_load()
    
    
     if page.ispostback then
     message.text="you choice the web site of:"+dropdownlist1.selecteditem.value
     end if
    
     end sub
    
     Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs)
    
     End Sub

</script>
<html>
<head>
</head>
<body>
     <form runat="server">
         <p>
             <asp:DropDownList id="DropDownList1" runat="server" BackColor="Control" ForeColor="#400000" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
                 <asp:ListItem Value="blueidea">blueidea</asp:ListItem>
                 <asp:ListItem Value="tillage village">tillage village</asp:ListItem>
                 <asp:ListItem Value="warra">warra</asp:ListItem>
                 <asp:ListItem Value="leadbbs">leadbbs</asp:ListItem>
                 <asp:ListItem Value="vv32">vv32</asp:ListItem>
                 <asp:ListItem Value="web site">web site</asp:ListItem>
             </asp:DropDownList>
             <asp:Button id="Button1" runat="server" BackColor="#E0E0E0" ForeColor="Maroon" Text="submit query" BorderColor="DarkCyan" BorderStyle="Double"></asp:Button>
         </p>
         <p>
             <asp:Label id="message" runat="server" Width="370px" Height="28px"></asp:Label>
         </p>
     </form>
</body>
</html>

在vbscript里面,只有一個基本數(shù)據(jù)類型,就是variant,而且不區(qū)分大小寫,它的變量聲名有兩種方式:顯式和隱式

在vb.net里面,是有些不同的:
變量是允許在內(nèi)存中存儲信息,才可以執(zhí)行一些數(shù)學(xué)函數(shù),處理文本,執(zhí)行其他函數(shù)等操作,變量是內(nèi)存中的一個空間,一般都會被指明名稱和數(shù)據(jù)類型的。

VB.NET是一種強類型的語言,so任何變量都必須有數(shù)據(jù)類型,它有4個部分:名稱、內(nèi)存空間、數(shù)據(jù)類型、變量的值。

使用變量時,最好明確創(chuàng)建或者聲名,最簡單的就是用關(guān)鍵字dim(dimension)的縮寫,dim strmy ,這在無形中做了3件事:建立變量的名稱、指定了類型、在內(nèi)存中分配了一塊空間,在變量賦值之前,內(nèi)存中什么也不包含的。

ISnothing(srtmy)可以檢查變量是否包含值,如果變量為空,ISNothing(strmy)就返回True,如果變量不是空,就返回False。

請不要違背以下三個原則命名變量:
1、必須以字母開頭;
2、不能包含內(nèi)嵌的句號/停頓或者空格;
3、不能與VB.NET的保留字相同;
就像下面這樣命名:

dim strmy as string
strmy="5do8"
dim strmy2 as string="5do8"

等技巧和vbscript里面類似的,慢慢掌握吧。

數(shù)據(jù)類型
vb.net里面有12中不同的內(nèi)置數(shù)據(jù)類型,可以官方的分為3大類:數(shù)字類型、文本型、其他類型(有人叫混合類型,我認為不太合適)
數(shù)字類型:
1、integer(整形)(范圍在20億左右),如0,12,98都是整型的;
2、byte(字節(jié))(范圍在0-255,無負數(shù)),由于它在計算機只存儲一個字節(jié),速度很快,特cool;
3、short(短整型)(范圍在-32768到32767);
4、long(長整型)(很長);
5、single(單精度),可帶小數(shù)部分的;
6、Double(雙精度);
7、Decimal(小數(shù))(最多28位小數(shù));

選擇定義的時候要恰到好處,不要浪費內(nèi)存。

文本型:
1、string(字符串);
2、char(字符)學(xué)過c++的都知道的,將文本以數(shù)的形式存儲.范圍是0-65535,
定義的時候雙引號后面用C來表示這是個char變量,而不是string ;

其他類型
1、Date(日期型);
2、boolean(布爾型) false-(0)和true(其他數(shù)字);

有時候希望變量賦值以后,在執(zhí)行過程中值保持不變,用常量const :const Asints as integer =-255

修改常量的值是不被支持的。

vb.net還提供了一系列以c開頭的轉(zhuǎn)換函數(shù),例如cint()等,很有用,慢慢在實踐中就體會到了。

聲名數(shù)組:
和其他變量一樣,數(shù)組在使用前也要用關(guān)鍵在dim聲明的,在聲明的時候末尾還要加上另外一個參數(shù),以指定數(shù)組的大小,然后可以存儲最大索引值+1了,看看一個例子:啟動webmatrix,創(chuàng)建新文件P87.aspx,在code視圖中,寫入:

sub page_load()
     if ispostback then
     dim darr(4) as string
     darr(0)="www.blueidea.com"
     darr(1)="www.5do8.com"
     darr(2)="www.dw8.cn"
     darr(3)="www.google.com"
     darr(4)="www.usst.edu.cn"
     labtxt.text="your aaary   is " & darr(txtnum.text)
     labtxt.visible=true
     end if
end sub

在視圖中插入label,buttom,input標(biāo)簽,最后的源碼就是:

<%@ Page Language="VB" %>
<script runat="server">

     sub page_load()
         if ispostback then
         dim darr(4) as string
         darr(0)="www.blueidea.com"
         darr(1)="www.5do8.com"
         darr(2)="www.dw8.cn"
         darr(3)="www.google.com"
         darr(4)="www.usst.edu.cn"
         labtxt.text="your aaary   is " & darr(txtnum.text)
         labtxt.visible=true
         end if
     end sub

</script>
<html>
<head>
</head>
<body>
     <form runat="server">
         <p>
             <asp:TextBox id="txtnum" runat="server" BackColor="#E0E0E0" BorderColor="#C0FFC0"></asp:TextBox>
             <asp:Button id="Button1" runat="server" BackColor="#E0E0E0" BorderColor="Green" Text="submit to array" BorderStyle="Groove"></asp:Button>
         </p>
         <p>
             <asp:Label id="Labtxt" runat="server" BackColor="#004040" BorderColor="Silver" Visible="False" Width="240px" Height="28px" ForeColor="White"></asp:Label>
         </p>
         <!-- Insert content here -->
     </form>
</body>
</html>

效果:

然后運行,輸入數(shù)據(jù),顯示數(shù)組的值,注意這里不要輸入0-4以為的數(shù)字,負責(zé)就是越界,這在后面我們要控制的,這里只是演示數(shù)組而已。

多維數(shù)組
和vbscript里面的及其相似,其他定義和數(shù)組一樣,就多了維數(shù).

數(shù)據(jù)集合
通常需要用不同的方法將項分組,這些高級技術(shù)在VB.NET中稱為集合,包括了arraylist、hashtable、sortedlist,集合的特性如下:
1、集合可以包含不定數(shù)目的成員;
2、集合中的元素僅僅因為他們處于相同的集合才發(fā)生關(guān)系;
3、集合的元素不必共享相同的數(shù)據(jù)類型;
4、當(dāng)整個集合發(fā)生變動時,對象在集合的位置也可以改變;

.net已經(jīng)上路了,前幾天著重寫了寫asp.net(VB)的基本安裝、語法、變量、原計劃把服務(wù)器控制結(jié)構(gòu)和過程編程也寫上,但,這和asp里面的沒什么區(qū)別,在循環(huán)結(jié)構(gòu)里面多了一個with...end with操作一個對象的屬性的,其他的都差不多,想看詳細教程的請查閱Msdn,我就跳過這一節(jié)了,另外跳轉(zhuǎn)結(jié)構(gòu)---子例程和函數(shù)也跳過,不過,里面的模塊化很有意思的,還有傳遞參數(shù)的時候按照引用還是值傳遞這個很是重要,至于其中的區(qū)別,學(xué)過c++的都知道,不太明白的請查閱相關(guān)資料......由于篇幅關(guān)系,我把事件驅(qū)動編程和回送也跳過,相應(yīng)用戶的事件組,這個很有必要在這里說說。

官方定義事件:事件是由來自代碼外部的某種力量在應(yīng)用程序中引發(fā)的一個操作.將事件驅(qū)動環(huán)境按照順序分為以下4個部分:

1、發(fā)生一個事件,like用戶單擊按鈕;
2、系統(tǒng)檢測到事件,asp.net注冊已發(fā)生的事件;
3、系統(tǒng)對事件做反應(yīng),執(zhí)行一些代碼;
4、系統(tǒng)返回其初始狀態(tài),等待下一事件;

html葉子是按照代碼的順序依次執(zhí)行的,而事件驅(qū)動編程強調(diào)的是相應(yīng)用戶,執(zhí)行事件,等待相應(yīng)的思想。

ASP.NET支持3個主要的事件組,第一組是html內(nèi)部的事件,這些事件在瀏覽器上執(zhí)行。第二組包含在asp.net生成頁面時自動發(fā)生,我們使用這些事件建立頁面.第三種包含了用戶與頁面交互時發(fā)生的所有事件(這種最強大)。

事件驅(qū)動編程和回送回送是處理過程,該過程包括:瀏覽器將信息發(fā)送到瀏覽器,告訴服務(wù)器處理事件,服務(wù)器執(zhí)行次事件處理程序中的代碼,并將得到的html再傳送到瀏覽器,回送只作用于有屬性runat="server"的web窗口,且只有asp.net控件才能將信息傳送到服務(wù)器。

下面看個事件驅(qū)動的實例結(jié)束本節(jié).呵呵.
實例:我們要做這件事,設(shè)計一個"東西",要實現(xiàn)的是能加減乘除操作,并且顯示出計算結(jié)果。

現(xiàn)看看算法吧:

sub page_load(sender as object,e as eventargs)
     btnadd.backcolor=system.drawing.color.lightgray
     btnsubtract.backcolor=system.drawing.color.lightgray
     btnfactor.backcolor=system.drawing.color.lightgray
     btnra.backcolor=system.drawing.color.lightgray
end sub

sub ca(sender as object,e as eventargs)
     select case sender.id
     case "btnadd"
         labtxt.text=cdbl(input1.text)+cdbl(input2.text)
     case "btnsubtract"
         labtxt.text=cdbl(input1.text)-cdbl(input2.text)
     case "btnfactor"
         labtxt.text=cdbl(input1.text)*cdbl(input2.text)
     case "btnra"
         labtxt.text=cdbl(input1.text)/cdbl(input2.text)
     end select

     sender.backcolor=system.drawing.color.yellow
end sub


 

分析上面代碼:page_load事件當(dāng)整個頁面第一次可見時發(fā)生,這里實現(xiàn)了令4個按鈕的背景顏色為淡灰色。子例程ca執(zhí)行的是用戶點擊按鈕操作后發(fā)生的事件,然后回送labtxt上,最后改變選擇web控件對象(按鈕)的背景顏色,注意到:

sub ca(sender as object,e as event)
'some code .............
end sub

它是事件處理程序提供的參數(shù)向處理程序傳遞參數(shù)事件信息,其中第一個參數(shù)sender提供了引發(fā)事件對象的引用,第二個參數(shù)E是一個事件類,用于捕捉所處理時間狀態(tài)的信息,并傳遞與該事件對應(yīng)的對象。

下面在視圖中拉上這7個控件,注意這里需要正確填寫每個控件的ID,并且要在每個按鈕上添加事件:

onclick="ca"

意思就是說當(dāng)點擊這個按鈕是發(fā)生事件ca,這是不可缺少的。
一切搞定了的話,最后的aspx頁面效果就像這樣:

所有源碼:

運行代碼框

以下是引用片段:

<%@ Page Language="VB" %>
<script runat="server">

     sub page_load(sender as object,e as eventargs)
         btnadd.backcolor=system.drawing.color.lightgray
         btnsubtract.backcolor=system.drawing.color.lightgray
         btnfactor.backcolor=system.drawing.color.lightgray
         btnra.backcolor=system.drawing.color.lightgray
     end sub
    
     sub ca(sender as object,e as eventargs)
         select case sender.id
         case "btnadd"
             labtxt.text=cdbl(input1.text)+cdbl(input2.text)
         case "btnsubtract"
             labtxt.text=cdbl(input1.text)-cdbl(input2.text)
         case "btnfactor"
             labtxt.text=cdbl(input1.text)*cdbl(input2.text)
         case "btnra"
             labtxt.text=cdbl(input1.text)/cdbl(input2.text)
         end select
    
         sender.backcolor=system.drawing.color.yellow
     end sub

</script>
<html>
<head>
</head>
<body>
     <form runat="server">
         <p>
             <asp:TextBox id="input1" runat="server"></asp:TextBox>
             <asp:Button id="btnadd" runat="server" Text=" +   " onclick="ca"></asp:Button>
             <asp:Button id="btnsubtract" runat="server" Text=" - " onclick="ca"></asp:Button>
         </p>
         <p>
             <asp:TextBox id="input2" runat="server"></asp:TextBox>
             <asp:Button id="btnfactor" runat="server" Text=" * " onclick="ca"></asp:Button>
             <asp:Button id="btnra" runat="server" Text=" ÷ " onclick="ca"></asp:Button>
         </p>
         <p>
             <asp:Label id="labtxt" runat="server" Width="201px" Height="26px"></asp:Label>
         </p>
         <!-- Insert content here -->
     </form>
</body>
</html>

對象就是能看到,感到,聽到,觸摸到,嘗到或聞到的東西,在這里我們這樣“定義”:對象是一個自包含的實體,用一組可識別的特性和行為來標(biāo)識。

在面向?qū)ο蟮木幊?oop)的編程方式,用使用下面的兩個術(shù)語。
類:這是對象的模板,定義了對象的特性。
實例:這是一個真實的對象,可以與之交互的東西。

屬性,方法和事件

在OOP中,下面的術(shù)語描述對象的特性。
屬性:這是一個名次,描述了某個對象的屬性
方法:這是一個動詞,描述了對象可以完成的工作,或者希望它完成的工作。
事件:描述了對象為相應(yīng)某個動作而執(zhí)行的操作。

.net中的對象
在.net中,其實所有的東西都是對象。為什么要使用對象?

在編程時,對象的面向?qū)ο缶幊毯兔嫦驅(qū)ο笤O(shè)計的一部分,它們具有非常大的優(yōu)勢,許多人認為這是一個復(fù)雜的主題,但實際上,它非常簡單,可以用四個簡單的術(shù)語來解釋:抽象、封裝、多態(tài)和繼承。

抽象:這是一個隱藏復(fù)雜性,類的內(nèi)部工作情況,所以用戶不必知道它的運作方式,就像。如果想要看電視,就不必知道電視機時如何工作的,只需打開電視機,搜索頻道即可,on/off開關(guān)抽象了實際的操作,在string例子里,有一個trim方法,它可以刪除字符串尾部的空格,同樣不需要知道他是如何完成這個任務(wù)的,只要知道它有這個功能即可。

封裝:每個對象都包含進行操作所需要的所有信息,這個對象稱為封裝,因此對象不比依賴其他對象來完成自己的操作,在術(shù)語TOupper()方法中,string不必到其他地方獲取信息來把所有的字符轉(zhuǎn)換為大寫。

多態(tài):這個術(shù)語用于表示不同的對象可以執(zhí)行相同的動作,但要通過他們自己的實現(xiàn)代碼來執(zhí)行,名稱一樣,但底層實現(xiàn)的代碼是不一樣的。

繼承:它定義了類如何相互關(guān)聯(lián),共享特性的,繼承的工作方式是,定義類和子類,其中子類繼承了父類的所有特性,繼承的重要性是,它迫使類型相似的類具有一致性,并允許共享代碼,如果決定創(chuàng)建一個新類,就不必定義父類的所有特性。

好了,我們看個實例吧,創(chuàng)建一個user類,他具有一下特性:
屬性:name ,point,level
方法:post(),reply(),change()
ok,現(xiàn)在在你的webmatrix里面創(chuàng)建吧。

看看以下源碼:

public class user

     public sub new()
     end sub

     private _name as string
     private _point as integer
     private _level as string

     public property name as string

     get
     return _name
     end get

     set(byval value as string)
     _name=value
     end set

     end property

     public property point as integer
     get
     return _point
     end get

     set(byval value as integer)

     if value<0 then
     value=0
     end if
     _point=value

     end set

     end property

     public property level as string

     get
     return _level
     end get

     set(byval value as string)
     _level=value
     end set

     end property

     end class


 

這里定義的就是上面我們想要的,注意,如果你以前不了解一門面向?qū)ο笤O(shè)計的語言的話理解起來比較困難的。創(chuàng)建實例的是:

     sub page_load(sender as object,e as eventargs)
     dim blueidea as new user()
     blueidea.name="5do8"
     blueidea.point="5000"
     blueidea.level="終極會員"

     name.text=blueidea.name
     point.text=blueidea.point
     level.text=blueidea.level
     end sub

html視圖還是注意ID寫上3各label控件就ok了,可以看到效果:

name: 5do8 point:5000 level:終極會員

代碼分析如下:

1、首先用class關(guān)鍵字定義類,后面是類名,而public是表示可以用于其他的程序;
2、然后是構(gòu)造函數(shù),new(),如果不寫的話也行,因為,net默認提供構(gòu)造函數(shù)的,這和c++里面的一個模式;
3、定義私有變量,用來存儲類的屬性,這些變量在代碼的外部不能訪問,如何使用這些變量,就要使用property語句即可;

public property name as string
get
return _name
end get

set (byval value as string)
_name=value
end set
end property

第一行里面的public聲名在外部可以訪問,property聲明一個屬性,它后面是屬性的名及其類型。get返回私有變量的值,這是內(nèi)部機制,接下來的set語句,在屬性中存儲一個值時執(zhí)行這個語句,這里僅僅把私有屬性設(shè)置為參數(shù)傳送的值,set 語句有些像方法調(diào)用,只傳一個參數(shù),該參數(shù)在設(shè)置屬性時由.net自動賦值。
..........其他的依次同理....最后是結(jié)束類end class。

創(chuàng)建實例的時候:

dim blueidea as new user()
     blueidea.name="5do8"
     blueidea.point="5000"
     blueidea.level="終極會員"

第一行創(chuàng)建user類的一個實例,名稱是blueidea。接下來是設(shè)置它的屬性值。最后綁定在web控件上。

這就是一個很簡單的使用類的實例,但不像c++那樣,asp.net好像沒有提供析構(gòu)函數(shù)釋放一些不必要的內(nèi)存占用等。

另外,高級類屬性和方法就不說了,很多,慢慢的在實踐中應(yīng)該可以掌握的。

.net框架包含幾個命名空間,其中有幾十個用于數(shù)據(jù)庫訪問的類,主要有system.data.sqlclient和system.data.oledb兩大類,這里我主要介紹小巧一點的system.data.oledb空間中的類,因為system.data.sqlclient只與microsoft sql server數(shù)據(jù)庫一起工作,而前者是支持access或者oracle 數(shù)據(jù)庫。

system.data.oledb名稱空間包含以下這些類:
1、oledbconnection(代表一個打開的數(shù)據(jù)庫連接)
2、oledbcommand(代表一個sql語句或存儲過程)
3、oledbdatareader(代表從數(shù)據(jù)庫查詢返回的結(jié)果)

執(zhí)行常見的數(shù)據(jù)庫任務(wù)

在接下來的一些日子里面,我會陸續(xù)的寫上如何創(chuàng)建和打開數(shù)據(jù)庫,獲取和顯示數(shù)據(jù)庫記錄,添加新的數(shù)據(jù)庫記錄,更新數(shù)據(jù)庫記錄,刪除數(shù)據(jù)庫記錄等。這些都是很基本的操作,但能令初學(xué)者心血彭湃的。呵呵。

當(dāng)您使用microsoft access或者oracle,需要使用以下的頁面指令來導(dǎo)入system.data.oledb命名空間:

<%@ import namespace = "system.data.oledb"%>

使用sql server數(shù)據(jù)庫的鏈接的話是:

<%@ import namespace = "system.data.sqlclient"%>

打開數(shù)據(jù)庫
要訪問數(shù)據(jù)庫,首先要創(chuàng)建和打開數(shù)據(jù)庫鏈接,創(chuàng)建連接的方式看你的數(shù)據(jù)庫類型,如下代碼創(chuàng)建了一個sql數(shù)據(jù)庫的連接:

<%@ import namespace = "system.data.sqlclient"%>
<script runat="server">
sub page_load
dim sqlconn as sqlconnection
sqlconn=new sqlconnection("server=localhost;uid=sa;pwd=sd;database=db")
sqlconn.open()
end sub
</script>

第一行導(dǎo)入命名空間,在page_load子例程中創(chuàng)建和打開,先創(chuàng)建一個名為sqlconn的實例,通過向sqlconnection類的構(gòu)造器傳遞一個字符串參數(shù),對sqlconn類進行初始化,最后通過sqlconnection類的open()方法實際打開鏈接。

同樣的道理,我們可以類似的打開access的數(shù)據(jù)庫,如下的代碼:

<%@ import namespace ="system.data.oledb" %>
<srcipt runat="server">
sub page_load()
dim conn as oledbconnection
conn=new oledbconnection("provider=microsoft.jet.oledb.4.0;data source=d:\web\web\net\data\db.mdb")
conn.open()
end sub
</srcipt>

在使用完數(shù)據(jù)庫鏈接時,應(yīng)盡快關(guān)閉它是很重要的,每個數(shù)據(jù)庫都有連接數(shù)量的限制,關(guān)閉鏈接使它可以供其他的頁面使用,應(yīng)使用下面的語句關(guān)閉sqlconnection或者oledbconnection:

yourconnname.close

在ASP.net頁面中最常用的是SQL中的select語句:

select szd_first,szd_last
from site_data
where id='2'

在asp.net頁面執(zhí)行一個select語句需要以下4步完成:
1、創(chuàng)建和打開數(shù)據(jù)庫
2、創(chuàng)建沂河代表sql select語句的數(shù)據(jù)庫命令
3、用executereader()方法執(zhí)行這個命令,并且返回一個datareader.
4、遍歷datareader,顯示查詢的結(jié)果。

在使用ado.net查詢中,查詢的結(jié)果在一個datareader中返回,更準(zhǔn)確的說,查詢的結(jié)果由一個sqldatareader或oledbdatareader表示,datareader代表一個只向前的數(shù)據(jù)庫記錄流,這意味著datareader每次只代表一個記錄,要想獲取流中的下一個記錄,必須調(diào)用read()方法,要想顯示所有的記錄,必須反復(fù)調(diào)用read()的方法,直到流的尾部,不能回頭。例如asp里面的游標(biāo)只向前移動。

下面的程序顯示了sql server讀取數(shù)據(jù)庫的記錄:

<%@ import namespace="system.data.sqlclient"%>
<%
dim sqlconn as sqlconnection
dim sqlcmd as sqlcommand
dim sqlreader as sqldatareader
sqlconn=new sqlconnection("server=localhost;uid=sa;pwd=sd;database=data")
sqlconn.open()
sqlcmd=new sqlcommand("select szd_first from site_data",sqlconn)
sqlreader=sqlcmd.executereader()
while sqlconn.read()
response.write("<li>")
response.write(sqlreader("szd_first"))
end while
sqlreader.close
sqlconn.close
%>

分析:先導(dǎo)入sql server的ado.net類需要的名稱空間,然后創(chuàng)建一個數(shù)據(jù)庫conn,這和asp相似,接著用一個sql select語句的sql字符串初始化sqlcmd對象,這個語句從名為site_data的表中讀取所有的記錄。然后調(diào)用sqlcommand類的executereader()方法執(zhí)行這個命令,返回執(zhí)行結(jié)果的sqlreader,然后遍歷所有記錄。

下面演示一個從access數(shù)據(jù)庫里面讀出數(shù)據(jù)的源碼:

<%@ Page Language="VB" %>
<%@ import namespace="system.data.oledb"%>

<script runat="server">
sub page_load()
     dim conn as oledbconnection
     dim accmd as oledbcommand
     dim acreader as oledbdatareader
     conn= new oledbconnection("provider=microsoft.jet.oledb.4.0;data source=d:\web\web\net\data\db.mdb")
     conn.open()
     accmd=new oledbcommand("select szd_lastname from site_n",conn)
     acreader=accmd.executereader()
     while acreader.read()
     response.write("<LI>" & acreader("szd_lastname"))    
     end while
     acreader.close
     conn.close
end sub

</script>

有時候,我們要查詢符合條件的一條記錄,如果按照上面的executereader,效率顯然很差,這里介紹另外一種方法executescalar,在幾張集聚功能的count,max,min等,這個例子:

     sub page_load()
          dim conn as oledbconnection
          dim accmd as oledbcommand
           conn= new oledbconnection("provider=microsoft.jet.oledb.4.0;data source=d:\web\web\net\data\db.mdb")
          conn.open()
          accmd=new oledbcommand("select count(*) from site_n ",conn)
          actxt.text=accmd.executescalar()
          conn.close
     end sub

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多