安裝運(yùn)行.net需要的軟件
前言:首先對(duì)DM編程區(qū)的朋友們說(shuō)聲,您好,辛苦了,因?yàn)槲腋械饺绻麤](méi)有興趣的話,每天寫(xiě)呀寫(xiě)呀,分析呀分析呀,確實(shí)很累的,我在今年5月份asp入了門(mén).在這里泡了2個(gè)月,技術(shù)有所提高,然后不小心踏入了不歸路---------水區(qū),后來(lái)由于某些原因,做了幾個(gè)小系統(tǒng),只是稍微掌握的系統(tǒng)了一點(diǎn),在7月-9月的這段時(shí)間,由于某些原因把c++拿出來(lái)學(xué)了學(xué),基本掌握.不要說(shuō)我賣(mài)弄,或者說(shuō)感到我說(shuō)的基礎(chǔ)的話,你可以馬上閃人,我還是那句話,要?jiǎng)?wù)實(shí),我不說(shuō)理論,因?yàn)槲沂冀K相信實(shí)踐中經(jīng)驗(yàn)的來(lái)的就是理論,如果你每天抱著看什么什么原理的話,很難掌握的,前端時(shí)間有人說(shuō).net久久不能入門(mén),我很是懷疑他的方法或者基礎(chǔ),坦白的說(shuō),我個(gè)人感覺(jué)學(xué).net還是要些基礎(chǔ)的,什么編程都不會(huì)的別學(xué),先搞定一門(mén)再說(shuō),我這里推薦一本書(shū):《beginning asp.net 1.1with vb.net 2003》就是《asp.net 1.1入門(mén)經(jīng)典--vb.net2003編程篇》這本書(shū)講的很不錯(cuò),適合初學(xué)者。
個(gè)人基礎(chǔ):asp基本掌握,c++基本掌握;
電腦配置:6.5G硬盤(pán)+128M內(nèi)存,其他設(shè)備都是類(lèi)似的配置+windows2000;
軟件要求吧:
1、MDAC 2.7(微軟數(shù)據(jù)庫(kù)引擎)大約5.01M;
2、Microsoft.NET framework1.1大約23.1M,比這大正常,版本問(wèn)題吧;
3、NET_Framework_SDK_1.1_CHS大約116M.和這大小差不多;
你要問(wèn)那里下載的話就在google輸入以上英文,對(duì)應(yīng)的很多,自己選擇,然后按照1-2-3的順序安裝,安裝完畢了在控制面板---管理工具--生成Microsoft .NET Framework 1.1 Configuration和 Microsoft .NET Framework 1.1 Wizards,這說(shuō)明你的,net服務(wù)器的環(huán)境已經(jīng)配置的差不多了,如果你感到你的計(jì)算機(jī)很不錯(cuò)的話就裝上,就裝上Visual Studio 2005 Express 先奢侈一下吧,如果你想咱們快寫(xiě)進(jìn)行,就裝上webmatrix 就行了,它大約1.1M,asp.net在web服務(wù)器IIS下運(yùn)行的,也可以在webmatrix下運(yùn)行的,安裝這些完畢了(我假定你已經(jīng)裝了至少很我一樣多的東西,webmatrix你也安裝了)。
現(xiàn)在好像沒(méi)什么要我們操心的了,啟動(dòng)webmatrix,會(huì)彈出:

創(chuàng)建新文件:
1、絕對(duì)本地路徑,你自己選;
2、名稱(chēng)你自己寫(xiě);
3、language:visual basic.net ;
c#的過(guò)短時(shí)間我仔細(xì)看看怎么轉(zhuǎn)變,再說(shuō),這種軟件你應(yīng)該很熟悉了,點(diǎn)擊ok了進(jìn)入編寫(xiě)區(qū):
編輯區(qū)下面的4個(gè)選項(xiàng):Design / html / code all
design是可視化設(shè)計(jì) / html是可視化生成的html代碼 / code是.net將要運(yùn)行的代碼 ,它其有3中插入方式:
1、內(nèi)聯(lián)代碼<%%>
2、<script>標(biāo)記
3、服務(wù)器控件
現(xiàn)在就在all視圖下寫(xiě)入一下源碼:
<%@ 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>
然后保存,點(diǎn)擊上邊的中間的圖標(biāo):
看路徑確定,它將啟動(dòng)webmatrix,然后轉(zhuǎn)到 http://localhost:8080 下面,同時(shí)你的電腦右邊彈出一個(gè)很酷的提示框,大體說(shuō).net服務(wù)已經(jīng)啟動(dòng),你在瀏覽器中將看到:
we study asp.net on this site.
這說(shuō)明了2件事情:
1、你的.net服務(wù)器配置好了,就等你寫(xiě)代碼了;
2、你很聰明的操作了,net的安裝過(guò)程了;
當(dāng)然,如果你已經(jīng)安裝了IIS的話就可以在瀏覽器中輸入網(wǎng)址就像打開(kāi)asp文件那樣可以打開(kāi)aspx文件的并運(yùn)行之了,這是令人興奮的。
前言:當(dāng)你就像我想象的那樣安裝.net完畢的話,今天也許你躍躍欲試的想馬上操作數(shù)據(jù)庫(kù)...編輯...頁(yè)面生成.....等了,你在ASP里面熟悉的操作都想用.net搞定.那我先要買(mǎi)個(gè)關(guān)子,你也許已經(jīng)有了VB的基礎(chǔ)了,也許asp熟練掌握了....如果你認(rèn)為.net的變量你不看規(guī)則不太習(xí)慣的話,還是有必要靜下心來(lái),先看看.net(vb)中是如何操作的,其實(shí)是大同小異的,另外控件大家想必知道,<input type="text">這就是html中的控件,正因?yàn)橛辛诉@些東西so程序員才能收集信息反饋顯示.....,下面我簡(jiǎn)要的介紹一下,其實(shí)我也感覺(jué)沒(méi)有必要把每個(gè)控件的屬性都知道的,如果你感興趣的話在webmatrix的視圖里面隨便拉個(gè)左邊的就去看看源碼就知道這是什么控件了,我就隨便說(shuō)說(shuō)幾個(gè)非常常用的,這寫(xiě)介紹你可以不看的,只看變量就行的。
控件
現(xiàn)看看控件吧,所有的web控件都必須有2個(gè)屬性,第一個(gè)當(dāng)然就是ranat="server",它告訴asp.net在服務(wù)器上處理控件,并為控件執(zhí)行所有的asp.net的功能,包括狀態(tài)的創(chuàng)建.第二個(gè)屬性是名稱(chēng)ID="mycontrolname"這就像人的身份證一樣,在代碼中指定名稱(chēng),引用該控件,看看這個(gè)asp.net和html窗口標(biāo)記府的比較,表格來(lái)自上面書(shū)籍的P56頁(yè),但不全。
asp.net控件 對(duì)應(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">
大概就是這幾個(gè)比較常用,發(fā)現(xiàn)沒(méi)asp.net的控件都是類(lèi)型前面有<asp:>,這是asp.net專(zhuān)用的,也就是說(shuō)這是用于server服務(wù)的asp.net控件,那么,html在aspx文家中能運(yùn)行么?能,好的很,因?yàn)樗衋sp.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ù)其上運(yùn)行生成的文件源碼是:
<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)橐粋€(gè)很難認(rèn)識(shí)的字符串,這個(gè)value值........我也看不懂,但這不影響任何事情。
昨天我用了一個(gè)page_load事件控制label的text屬性的,page_load是加載aspx文件.net先解釋的事件,這就和window.onload差不多吧,以后慢慢說(shuō).看看它是怎么控制的:
sub page_load()
message1.text="i am message1"
message2.text="i am message2"
end sub
這就加載了message1的text顯示為i am message1,這就是一個(gè)簡(jiǎn)單的.net里面的web控件。
另外,再看看<asp:Dropdownlist>控件吧。啟動(dòng)webmatrix,創(chuàng)建一個(gè)新文件p56.aspx,選擇design視圖,然后在左邊選擇dropdownlist控件:

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

Items,它控制的是下拉選項(xiàng)項(xiàng)目,點(diǎn)擊最右邊的幾個(gè)小點(diǎn)點(diǎn)..

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

是不是很酷?不急,還沒(mé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
下面添加一個(gè)sub事件相應(yīng)按鈕選項(xiàng),如果頁(yè)面已經(jīng)提交ispostback就返回true,否則返回false。當(dāng)然也要添加一個(gè)label,id命名為message,okok,現(xiàn)在看看效果:

嗯,它就是這樣相應(yīng)的,看看所有的這個(gè)源碼:
以下是引用片段:
<%@ 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里面,只有一個(gè)基本數(shù)據(jù)類(lèi)型,就是variant,而且不區(qū)分大小寫(xiě),它的變量聲名有兩種方式:顯式和隱式
在vb.net里面,是有些不同的:
變量是允許在內(nèi)存中存儲(chǔ)信息,才可以執(zhí)行一些數(shù)學(xué)函數(shù),處理文本,執(zhí)行其他函數(shù)等操作,變量是內(nèi)存中的一個(gè)空間,一般都會(huì)被指明名稱(chēng)和數(shù)據(jù)類(lèi)型的。
VB.NET是一種強(qiáng)類(lèi)型的語(yǔ)言,so任何變量都必須有數(shù)據(jù)類(lèi)型,它有4個(gè)部分:名稱(chēng)、內(nèi)存空間、數(shù)據(jù)類(lèi)型、變量的值。
使用變量時(shí),最好明確創(chuàng)建或者聲名,最簡(jiǎn)單的就是用關(guān)鍵字dim(dimension)的縮寫(xiě),dim strmy ,這在無(wú)形中做了3件事:建立變量的名稱(chēng)、指定了類(lèi)型、在內(nèi)存中分配了一塊空間,在變量賦值之前,內(nèi)存中什么也不包含的。
ISnothing(srtmy)可以檢查變量是否包含值,如果變量為空,ISNothing(strmy)就返回True,如果變量不是空,就返回False。
請(qǐng)不要違背以下三個(gè)原則命名變量:
1、必須以字母開(kāi)頭;
2、不能包含內(nèi)嵌的句號(hào)/停頓或者空格;
3、不能與VB.NET的保留字相同;
就像下面這樣命名:
dim strmy as string
strmy="5do8"
dim strmy2 as string="5do8"
等技巧和vbscript里面類(lèi)似的,慢慢掌握吧。
數(shù)據(jù)類(lèi)型
vb.net里面有12中不同的內(nèi)置數(shù)據(jù)類(lèi)型,可以官方的分為3大類(lèi):數(shù)字類(lèi)型、文本型、其他類(lèi)型(有人叫混合類(lèi)型,我認(rèn)為不太合適)
數(shù)字類(lèi)型:
1、integer(整形)(范圍在20億左右),如0,12,98都是整型的;
2、byte(字節(jié))(范圍在0-255,無(wú)負(fù)數(shù)),由于它在計(jì)算機(jī)只存儲(chǔ)一個(gè)字節(jié),速度很快,特cool;
3、short(短整型)(范圍在-32768到32767);
4、long(長(zhǎng)整型)(很長(zhǎng));
5、single(單精度),可帶小數(shù)部分的;
6、Double(雙精度);
7、Decimal(小數(shù))(最多28位小數(shù));
選擇定義的時(shí)候要恰到好處,不要浪費(fèi)內(nèi)存。
文本型:
1、string(字符串);
2、char(字符)學(xué)過(guò)c++的都知道的,將文本以數(shù)的形式存儲(chǔ).范圍是0-65535,
定義的時(shí)候雙引號(hào)后面用C來(lái)表示這是個(gè)char變量,而不是string ;
其他類(lèi)型
1、Date(日期型);
2、boolean(布爾型) false-(0)和true(其他數(shù)字);
有時(shí)候希望變量賦值以后,在執(zhí)行過(guò)程中值保持不變,用常量const :const Asints as integer =-255
修改常量的值是不被支持的。
vb.net還提供了一系列以c開(kāi)頭的轉(zhuǎn)換函數(shù),例如cint()等,很有用,慢慢在實(shí)踐中就體會(huì)到了。
聲名數(shù)組:
和其他變量一樣,數(shù)組在使用前也要用關(guān)鍵在dim聲明的,在聲明的時(shí)候末尾還要加上另外一個(gè)參數(shù),以指定數(shù)組的大小,然后可以存儲(chǔ)最大索引值+1了,看看一個(gè)例子:?jiǎn)?dòng)webmatrix,創(chuàng)建新文件P87.aspx,在code視圖中,寫(xiě)入:
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>
效果:

然后運(yùn)行,輸入數(shù)據(jù),顯示數(shù)組的值,注意這里不要輸入0-4以為的數(shù)字,負(fù)責(zé)就是越界,這在后面我們要控制的,這里只是演示數(shù)組而已。
多維數(shù)組
和vbscript里面的及其相似,其他定義和數(shù)組一樣,就多了維數(shù).
數(shù)據(jù)集合
通常需要用不同的方法將項(xiàng)分組,這些高級(jí)技術(shù)在VB.NET中稱(chēng)為集合,包括了arraylist、hashtable、sortedlist,集合的特性如下:
1、集合可以包含不定數(shù)目的成員;
2、集合中的元素僅僅因?yàn)樗麄兲幱谙嗤募喜虐l(fā)生關(guān)系;
3、集合的元素不必共享相同的數(shù)據(jù)類(lèi)型;
4、當(dāng)整個(gè)集合發(fā)生變動(dòng)時(shí),對(duì)象在集合的位置也可以改變;
.net已經(jīng)上路了,前幾天著重寫(xiě)了寫(xiě)asp.net(VB)的基本安裝、語(yǔ)法、變量、原計(jì)劃把服務(wù)器控制結(jié)構(gòu)和過(guò)程編程也寫(xiě)上,但,這和asp里面的沒(méi)什么區(qū)別,在循環(huán)結(jié)構(gòu)里面多了一個(gè)with...end with操作一個(gè)對(duì)象的屬性的,其他的都差不多,想看詳細(xì)教程的請(qǐng)查閱Msdn,我就跳過(guò)這一節(jié)了,另外跳轉(zhuǎn)結(jié)構(gòu)---子例程和函數(shù)也跳過(guò),不過(guò),里面的模塊化很有意思的,還有傳遞參數(shù)的時(shí)候按照引用還是值傳遞這個(gè)很是重要,至于其中的區(qū)別,學(xué)過(guò)c++的都知道,不太明白的請(qǐng)查閱相關(guān)資料......由于篇幅關(guān)系,我把事件驅(qū)動(dòng)編程和回送也跳過(guò),相應(yīng)用戶(hù)的事件組,這個(gè)很有必要在這里說(shuō)說(shuō)。
官方定義事件:事件是由來(lái)自代碼外部的某種力量在應(yīng)用程序中引發(fā)的一個(gè)操作.將事件驅(qū)動(dòng)環(huán)境按照順序分為以下4個(gè)部分:
1、發(fā)生一個(gè)事件,like用戶(hù)單擊按鈕;
2、系統(tǒng)檢測(cè)到事件,asp.net注冊(cè)已發(fā)生的事件;
3、系統(tǒng)對(duì)事件做反應(yīng),執(zhí)行一些代碼;
4、系統(tǒng)返回其初始狀態(tài),等待下一事件;
html葉子是按照代碼的順序依次執(zhí)行的,而事件驅(qū)動(dòng)編程強(qiáng)調(diào)的是相應(yīng)用戶(hù),執(zhí)行事件,等待相應(yīng)的思想。
ASP.NET支持3個(gè)主要的事件組,第一組是html內(nèi)部的事件,這些事件在瀏覽器上執(zhí)行。第二組包含在asp.net生成頁(yè)面時(shí)自動(dòng)發(fā)生,我們使用這些事件建立頁(yè)面.第三種包含了用戶(hù)與頁(yè)面交互時(shí)發(fā)生的所有事件(這種最強(qiáng)大)。
事件驅(qū)動(dòng)編程和回送回送是處理過(guò)程,該過(guò)程包括:瀏覽器將信息發(fā)送到瀏覽器,告訴服務(wù)器處理事件,服務(wù)器執(zhí)行次事件處理程序中的代碼,并將得到的html再傳送到瀏覽器,回送只作用于有屬性runat="server"的web窗口,且只有asp.net控件才能將信息傳送到服務(wù)器。
下面看個(gè)事件驅(qū)動(dòng)的實(shí)例結(jié)束本節(jié).呵呵.
實(shí)例:我們要做這件事,設(shè)計(jì)一個(gè)"東西",要實(shí)現(xiàn)的是能加減乘除操作,并且顯示出計(jì)算結(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)整個(gè)頁(yè)面第一次可見(jiàn)時(shí)發(fā)生,這里實(shí)現(xiàn)了令4個(gè)按鈕的背景顏色為淡灰色。子例程ca執(zhí)行的是用戶(hù)點(diǎn)擊按鈕操作后發(fā)生的事件,然后回送labtxt上,最后改變選擇web控件對(duì)象(按鈕)的背景顏色,注意到:
sub ca(sender as object,e as event)
'some code .............
end sub
它是事件處理程序提供的參數(shù)向處理程序傳遞參數(shù)事件信息,其中第一個(gè)參數(shù)sender提供了引發(fā)事件對(duì)象的引用,第二個(gè)參數(shù)E是一個(gè)事件類(lèi),用于捕捉所處理時(shí)間狀態(tài)的信息,并傳遞與該事件對(duì)應(yīng)的對(duì)象。
下面在視圖中拉上這7個(gè)控件,注意這里需要正確填寫(xiě)每個(gè)控件的ID,并且要在每個(gè)按鈕上添加事件:
onclick="ca"
意思就是說(shuō)當(dāng)點(diǎn)擊這個(gè)按鈕是發(fā)生事件ca,這是不可缺少的。
一切搞定了的話,最后的aspx頁(yè)面效果就像這樣:

所有源碼:
運(yùn)行代碼框
以下是引用片段:
<%@ 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>
|
對(duì)象就是能看到,感到,聽(tīng)到,觸摸到,嘗到或聞到的東西,在這里我們這樣“定義”:對(duì)象是一個(gè)自包含的實(shí)體,用一組可識(shí)別的特性和行為來(lái)標(biāo)識(shí)。
在面向?qū)ο蟮木幊?oop)的編程方式,用使用下面的兩個(gè)術(shù)語(yǔ)。
類(lèi):這是對(duì)象的模板,定義了對(duì)象的特性。
實(shí)例:這是一個(gè)真實(shí)的對(duì)象,可以與之交互的東西。
屬性,方法和事件
在OOP中,下面的術(shù)語(yǔ)描述對(duì)象的特性。
屬性:這是一個(gè)名次,描述了某個(gè)對(duì)象的屬性
方法:這是一個(gè)動(dòng)詞,描述了對(duì)象可以完成的工作,或者希望它完成的工作。
事件:描述了對(duì)象為相應(yīng)某個(gè)動(dòng)作而執(zhí)行的操作。
.net中的對(duì)象
在.net中,其實(shí)所有的東西都是對(duì)象。為什么要使用對(duì)象?
在編程時(shí),對(duì)象的面向?qū)ο缶幊毯兔嫦驅(qū)ο笤O(shè)計(jì)的一部分,它們具有非常大的優(yōu)勢(shì),許多人認(rèn)為這是一個(gè)復(fù)雜的主題,但實(shí)際上,它非常簡(jiǎn)單,可以用四個(gè)簡(jiǎn)單的術(shù)語(yǔ)來(lái)解釋?zhuān)撼橄?、封裝、多態(tài)和繼承。
抽象:這是一個(gè)隱藏復(fù)雜性,類(lèi)的內(nèi)部工作情況,所以用戶(hù)不必知道它的運(yùn)作方式,就像。如果想要看電視,就不必知道電視機(jī)時(shí)如何工作的,只需打開(kāi)電視機(jī),搜索頻道即可,on/off開(kāi)關(guān)抽象了實(shí)際的操作,在string例子里,有一個(gè)trim方法,它可以刪除字符串尾部的空格,同樣不需要知道他是如何完成這個(gè)任務(wù)的,只要知道它有這個(gè)功能即可。
封裝:每個(gè)對(duì)象都包含進(jìn)行操作所需要的所有信息,這個(gè)對(duì)象稱(chēng)為封裝,因此對(duì)象不比依賴(lài)其他對(duì)象來(lái)完成自己的操作,在術(shù)語(yǔ)TOupper()方法中,string不必到其他地方獲取信息來(lái)把所有的字符轉(zhuǎn)換為大寫(xiě)。
多態(tài):這個(gè)術(shù)語(yǔ)用于表示不同的對(duì)象可以執(zhí)行相同的動(dòng)作,但要通過(guò)他們自己的實(shí)現(xiàn)代碼來(lái)執(zhí)行,名稱(chēng)一樣,但底層實(shí)現(xiàn)的代碼是不一樣的。
繼承:它定義了類(lèi)如何相互關(guān)聯(lián),共享特性的,繼承的工作方式是,定義類(lèi)和子類(lèi),其中子類(lèi)繼承了父類(lèi)的所有特性,繼承的重要性是,它迫使類(lèi)型相似的類(lèi)具有一致性,并允許共享代碼,如果決定創(chuàng)建一個(gè)新類(lèi),就不必定義父類(lèi)的所有特性。
好了,我們看個(gè)實(shí)例吧,創(chuàng)建一個(gè)user類(lèi),他具有一下特性:
屬性: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
這里定義的就是上面我們想要的,注意,如果你以前不了解一門(mén)面向?qū)ο笤O(shè)計(jì)的語(yǔ)言的話理解起來(lái)比較困難的。創(chuàng)建實(shí)例的是:
sub page_load(sender as object,e as eventargs)
dim blueidea as new user()
blueidea.name="5do8"
blueidea.point="5000"
blueidea.level="終極會(huì)員"
name.text=blueidea.name
point.text=blueidea.point
level.text=blueidea.level
end sub
html視圖還是注意ID寫(xiě)上3各label控件就ok了,可以看到效果:
name: 5do8 point:5000 level:終極會(huì)員
代碼分析如下:
1、首先用class關(guān)鍵字定義類(lèi),后面是類(lèi)名,而public是表示可以用于其他的程序;
2、然后是構(gòu)造函數(shù),new(),如果不寫(xiě)的話也行,因?yàn)?,net默認(rèn)提供構(gòu)造函數(shù)的,這和c++里面的一個(gè)模式;
3、定義私有變量,用來(lái)存儲(chǔ)類(lèi)的屬性,這些變量在代碼的外部不能訪問(wèn),如何使用這些變量,就要使用property語(yǔ)句即可;
public property name as string
get
return _name
end get
set (byval value as string)
_name=value
end set
end property
第一行里面的public聲名在外部可以訪問(wèn),property聲明一個(gè)屬性,它后面是屬性的名及其類(lèi)型。get返回私有變量的值,這是內(nèi)部機(jī)制,接下來(lái)的set語(yǔ)句,在屬性中存儲(chǔ)一個(gè)值時(shí)執(zhí)行這個(gè)語(yǔ)句,這里僅僅把私有屬性設(shè)置為參數(shù)傳送的值,set 語(yǔ)句有些像方法調(diào)用,只傳一個(gè)參數(shù),該參數(shù)在設(shè)置屬性時(shí)由.net自動(dòng)賦值。
..........其他的依次同理....最后是結(jié)束類(lèi)end class。
創(chuàng)建實(shí)例的時(shí)候:
dim blueidea as new user()
blueidea.name="5do8"
blueidea.point="5000"
blueidea.level="終極會(huì)員"
第一行創(chuàng)建user類(lèi)的一個(gè)實(shí)例,名稱(chēng)是blueidea。接下來(lái)是設(shè)置它的屬性值。最后綁定在web控件上。
這就是一個(gè)很簡(jiǎn)單的使用類(lèi)的實(shí)例,但不像c++那樣,asp.net好像沒(méi)有提供析構(gòu)函數(shù)釋放一些不必要的內(nèi)存占用等。
另外,高級(jí)類(lèi)屬性和方法就不說(shuō)了,很多,慢慢的在實(shí)踐中應(yīng)該可以掌握的。
.net框架包含幾個(gè)命名空間,其中有幾十個(gè)用于數(shù)據(jù)庫(kù)訪問(wèn)的類(lèi),主要有system.data.sqlclient和system.data.oledb兩大類(lèi),這里我主要介紹小巧一點(diǎn)的system.data.oledb空間中的類(lèi),因?yàn)閟ystem.data.sqlclient只與microsoft sql server數(shù)據(jù)庫(kù)一起工作,而前者是支持access或者oracle 數(shù)據(jù)庫(kù)。
system.data.oledb名稱(chēng)空間包含以下這些類(lèi):
1、oledbconnection(代表一個(gè)打開(kāi)的數(shù)據(jù)庫(kù)連接)
2、oledbcommand(代表一個(gè)sql語(yǔ)句或存儲(chǔ)過(guò)程)
3、oledbdatareader(代表從數(shù)據(jù)庫(kù)查詢(xún)返回的結(jié)果)
執(zhí)行常見(jiàn)的數(shù)據(jù)庫(kù)任務(wù)
在接下來(lái)的一些日子里面,我會(huì)陸續(xù)的寫(xiě)上如何創(chuàng)建和打開(kāi)數(shù)據(jù)庫(kù),獲取和顯示數(shù)據(jù)庫(kù)記錄,添加新的數(shù)據(jù)庫(kù)記錄,更新數(shù)據(jù)庫(kù)記錄,刪除數(shù)據(jù)庫(kù)記錄等。這些都是很基本的操作,但能令初學(xué)者心血彭湃的。呵呵。
當(dāng)您使用microsoft access或者oracle,需要使用以下的頁(yè)面指令來(lái)導(dǎo)入system.data.oledb命名空間:
<%@ import namespace = "system.data.oledb"%>
使用sql server數(shù)據(jù)庫(kù)的鏈接的話是:
<%@ import namespace = "system.data.sqlclient"%>
打開(kāi)數(shù)據(jù)庫(kù)
要訪問(wèn)數(shù)據(jù)庫(kù),首先要?jiǎng)?chuàng)建和打開(kāi)數(shù)據(jù)庫(kù)鏈接,創(chuàng)建連接的方式看你的數(shù)據(jù)庫(kù)類(lèi)型,如下代碼創(chuàng)建了一個(gè)sql數(shù)據(jù)庫(kù)的連接:
<%@ 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)建和打開(kāi),先創(chuàng)建一個(gè)名為sqlconn的實(shí)例,通過(guò)向sqlconnection類(lèi)的構(gòu)造器傳遞一個(gè)字符串參數(shù),對(duì)sqlconn類(lèi)進(jìn)行初始化,最后通過(guò)sqlconnection類(lèi)的open()方法實(shí)際打開(kāi)鏈接。
同樣的道理,我們可以類(lèi)似的打開(kāi)access的數(shù)據(jù)庫(kù),如下的代碼:
<%@ 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ù)庫(kù)鏈接時(shí),應(yīng)盡快關(guān)閉它是很重要的,每個(gè)數(shù)據(jù)庫(kù)都有連接數(shù)量的限制,關(guān)閉鏈接使它可以供其他的頁(yè)面使用,應(yīng)使用下面的語(yǔ)句關(guān)閉sqlconnection或者oledbconnection:
yourconnname.close
在ASP.net頁(yè)面中最常用的是SQL中的select語(yǔ)句:
select szd_first,szd_last
from site_data
where id='2'
在asp.net頁(yè)面執(zhí)行一個(gè)select語(yǔ)句需要以下4步完成:
1、創(chuàng)建和打開(kāi)數(shù)據(jù)庫(kù)
2、創(chuàng)建沂河代表sql select語(yǔ)句的數(shù)據(jù)庫(kù)命令
3、用executereader()方法執(zhí)行這個(gè)命令,并且返回一個(gè)datareader.
4、遍歷datareader,顯示查詢(xún)的結(jié)果。
在使用ado.net查詢(xún)中,查詢(xún)的結(jié)果在一個(gè)datareader中返回,更準(zhǔn)確的說(shuō),查詢(xún)的結(jié)果由一個(gè)sqldatareader或oledbdatareader表示,datareader代表一個(gè)只向前的數(shù)據(jù)庫(kù)記錄流,這意味著datareader每次只代表一個(gè)記錄,要想獲取流中的下一個(gè)記錄,必須調(diào)用read()方法,要想顯示所有的記錄,必須反復(fù)調(diào)用read()的方法,直到流的尾部,不能回頭。例如asp里面的游標(biāo)只向前移動(dòng)。
下面的程序顯示了sql server讀取數(shù)據(jù)庫(kù)的記錄:
<%@ 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類(lèi)需要的名稱(chēng)空間,然后創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)conn,這和asp相似,接著用一個(gè)sql select語(yǔ)句的sql字符串初始化sqlcmd對(duì)象,這個(gè)語(yǔ)句從名為site_data的表中讀取所有的記錄。然后調(diào)用sqlcommand類(lèi)的executereader()方法執(zhí)行這個(gè)命令,返回執(zhí)行結(jié)果的sqlreader,然后遍歷所有記錄。
下面演示一個(gè)從access數(shù)據(jù)庫(kù)里面讀出數(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>
有時(shí)候,我們要查詢(xún)符合條件的一條記錄,如果按照上面的executereader,效率顯然很差,這里介紹另外一種方法executescalar,在幾張集聚功能的count,max,min等,這個(gè)例子:
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