您好,在Visual Basic.NET中,是沒有像這樣的文件I/O操作的,一般都是通過System.IO.StreamReader和System.IO.StreamWriter類,System.IO.BinaryReader和System.IO.BinaryWriter類來讀寫文件以及利用My.Computer.FileSystem類讀寫文件,利用System.IO.Filestream類來創(chuàng)建文件,通過引用Microsoft Scripting Runtime來執(zhí)行文件(夾)和驅(qū)動器的特殊操作,常用的是System.IO.StreamReader和System.IO.StreamWriter類。
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、羅定網(wǎng)絡(luò)推廣、微信小程序開發(fā)、羅定網(wǎng)絡(luò)營銷、羅定企業(yè)策劃、羅定品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供羅定建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
例如說要讀取一個文件,我們可以利用System.IO.StreamReader類編寫一個方法(也就是函數(shù)),但是首先要在當(dāng)前類的開頭添加一個引用,引用名稱:System.IO,添加引用的代碼如下
Imports System.IO
添加引用之后,就在當(dāng)前類的內(nèi)部創(chuàng)建方法:
Private Function ReadFile(ByVal FileURL As String) As String
Dim sr As StreamReader = New StreamReader(FileURL)
ReadFile = sr.ReadToEnd()
sr.Close()
sr = Nothing
End Function
示例說明:
該方法是一個返回String(字符串)數(shù)據(jù)的函數(shù),F(xiàn)ileURL作為參數(shù)是用來存放需要訪問的文件的URL,當(dāng)然,要獲取一個文件的URL,就是利用這一句代碼實現(xiàn)的:
Dim sr As StreamReader = New StreamReader(FileURL)
當(dāng)獲取了URL之后,就要對文件進行讀取操作了,然后將讀取的結(jié)果返回給方法:
ReadFile = sr.ReadToEnd()
讀取文件完畢之后,要對文件執(zhí)行關(guān)閉操作:
sr.Close()
當(dāng)然別忘了清理資源:
sr = Nothing
StreamReader類可以從流或文件中讀取字符,在創(chuàng)建StreamREader類的對象時,可以指定一個流對象,也可以指定一個文件URL,創(chuàng)建對象后就可以調(diào)用他的方法,從流中讀取數(shù)據(jù),其常用方法如下:
Peek:返回下一個可用字符,但不使用它。
Read:讀取輸入流中下一個字符或一組字符并移動流或文件指針。
ReadBlock:從當(dāng)前流中讀取最大數(shù)量字符并從index開始將數(shù)據(jù)寫入buffer。
ReadLine:從當(dāng)前流中讀取一行字符并將字符作為String返回。
REadToEnd:從流的當(dāng)前位置到末尾讀取流。
Close:關(guān)閉打開的對象,釋放資源。
注:流,一種新的數(shù)據(jù)格式,這種格式可通過System.IO命名空間下的類訪問。流用Stream類表示,所有的流都是從這個類中繼承的。流向用戶提供了一個一般的數(shù)據(jù)視圖,隱藏了操作系統(tǒng)和底層設(shè)備的實現(xiàn)細節(jié),所有的流都支持讀寫操作。在打開文件時將返回對應(yīng)的流對象,用戶可以對流對象進行讀寫操作。
如果要對文件執(zhí)行按行讀取操作,這時就會用到枚舉,這時候,代碼就要更改一下了:
Private Function ReadFile(ByVal FileURL As String) As String
Dim sr As StreamReader = New StreamReader(FileURL)
For Each fLine As String In sr.ReadToEnd()
Line = sr.ReadLine()
ReadFile = ReadFile fLine
Next sr.ReadLine
sr.Close()
End Function
示例說明:
For Each…Next:派生于For…Next循環(huán),用于枚舉一系列對象中的成員,而這些對象組成集合,如果集合中至少存在一個元素,程序就會靜茹For Each塊執(zhí)行。其格式如下:
For Each 元素 [As 數(shù)據(jù)類型] In 元素集合
[循環(huán)體]
[Exit For]
[循環(huán)體]
Next [元素]
比如:
Dim CountNumber As ULong = 0
Dim FolderName() As String = New String() {" "}
For Each strFolder As String In My.Computer.FileSystem.GetDirectories("C:\")
CountNumber = CountNumber + 1
ReDim Preserve FolderName(1 To CountNumber)
FolderName = strFolder
Next strFolder
注:My.Computer.FileSystem.GetDirectories:主要用來枚舉指定目錄的子文件夾。
Preserve:主要用來避免重定義數(shù)組而不損失數(shù)組元素的原有數(shù)據(jù)。
另外,利用My.Computer.FileSystem也可以實現(xiàn)文件的讀取,其代碼如下:
Dim fpReader As String = My.Computer.FileSystem.ReadAllText("C:\test.txt")
示例說明:
定義一個字符串變量利用My.Computer.FileSystem.ReadAllText來實現(xiàn)對“C:\test.txt”的讀取。
如果是已經(jīng)編碼的文本,則可以使用My.Computer.FileSystem對象中的ReadAllText方法并提供路徑和文件編碼類型,將文本寫入字符串變量中,例如:
Dim fpReader As String = My.Computer.FileSystem.ReadAllText("C:\test.txt", _
System.Text.Encoding.UTF32)
當(dāng)然,System.Text.Encoding的成員不止一個,它還有如下成員:
System.Text.Encoding.UTF8
System.Text.Encoding.UTF16
System.Text.Encoding.ASCII
System.Text.Encoding.Unicode
這些是常見的成員,也是主要的成員。
另外,利用My.Computer.Filesystem類無法實現(xiàn)文件的行操作,還有,如果您的計算機未安裝完整的Microsoft.NET Framework Runtime,則無法實現(xiàn)這種操作!
寫入文件的操作同樣簡單,Visual Basic.NET 允許用戶使用StreamWriter來對文件寫入內(nèi)容,下面就讓我們來創(chuàng)建一個子例程,來實現(xiàn)文件的寫入:
Private Sub WriterFile(ByVal FileURL As String, ByVal FileCon As String)
Dim sr As StreamWriter = New StreamWriter(FileURL)
sr.Write(FileCon)
sr.Close()
sr = Nothing
End Sub
示例說明:
sr.Write(FileCon):將FileCon寫入文件FileURL之中。
另外,StreamWriter常用方法如下:
WriteLine:向流中寫入一行,后面跟結(jié)束符。
Write:寫入流,向流對象中寫入字符并移動流或文件指針。
Close:關(guān)閉打開的對象,釋放資源。
附:Visual Basic 6.0文件操作解說:
打開: Open 文件名 For Input | Output | Append As [#]文件號
Input打開讀入,文件不存在報錯。Output打開覆蓋寫入,文件不存在則創(chuàng)建。Append打 開追加寫入,文件不存在則創(chuàng)建。
讀: Line Input #文件號, 字符串變量
讀一行數(shù)據(jù)存入字符串變量,數(shù)據(jù)包括空格、Tab、等,不包括回車符和換行符,所以要顯示文件的換行效果,要手動添加回車符和換行符(vbCrLf)
Input #文件號, 變量1[, | ;] [變量2]...
這種方式可以存入多個變量,而且變量類型不限于字符串型。
寫: Print #文件號, 參數(shù)1[, | ;] [參數(shù)2]...
將各參數(shù)逐個寫入文件。參數(shù)間用逗號隔開時,文件中相應(yīng)插入多個空格;用分號隔開時,插入一個空格。可以用Spc(n)、Tab(n)等進行排版。
Write #文件號, 參數(shù)1[, | ;] [參數(shù)2]...
這種寫入方式將自動添加界定符,對不同參數(shù)的類型加以界定。
Visual Basic 6.0文件操作函數(shù):
Seek: Seek(文件號)
返回文件正在訪問的位置,返回值為長整型。對順序文件和二進制文件,返回值以字節(jié)為單位;對隨機訪問文件,返回值以記錄號為單位。
Seek: Seek [#]文件號,位置
定位文件到指定位置。位置單位同上所述。
Input: Input (字節(jié)數(shù),[#]文件號)
從文件的訪問當(dāng)前位置讀入指定字節(jié)數(shù)的數(shù)據(jù)。僅適用于順序文件和二進制文件。
EOF: EOF(文件號)
判斷文件的訪問位置是否在文件尾,如果是,返回True,否則,返回False。
LOF: LOF(文件號)
返回文件長度,單位為字節(jié)。
FileLen: FileLen (文件名)
返回文件名對應(yīng)文件的長度,單位是字節(jié)。該函數(shù)取磁盤文件標識中的長度,即文件打開前的長度,可以取未打開的文件長度。
GetAttr: GetAttr (Pathname)
返回指定文件或文件夾的屬性。
FileAttr: FileAttr (文件號)
返回文件號對應(yīng)文件的打開方式。
GetDateTime: GetDateTime (Pathname)
返回文件被創(chuàng)建或修改的最后日期和時間。
Free: FreeFile[(0|1)]
返回未被占用的文件號,F(xiàn)ree或Free(0)返回1~255之間未占用的文件號,F(xiàn)ree(1)返回256~511之間未占用的文件。
Dir: Dir (Pathname [,Attributes])
測試指定路徑是否有某文件,Attributes附加文件屬性條件,取值vbNormal、vbReadOnly、vbHidden、vbSystem、vbVolume、vbDirectory。
Kill: Kill (文件名)
刪除指定文件,文件名可包含路徑。
FileCopy: FileCopy 源文件,目標文件
拷貝文件。
Name: Name 舊文件名 As 新文件名
文件重命名。前后路徑不一致時,操作為移動文件并重命名。
MkDir: MkDir path
新建文件夾。
RmDir: Rmdir path
刪除文件夾。
ChDrive: ChDrive Drive
改變當(dāng)前驅(qū)動器 ChDrive "D"
CurDir: CurDir [(driver)]
返回當(dāng)前工作路徑,指定driver則返回目標驅(qū)動器的當(dāng)前工作路徑。
舉例:
'新建文件,并寫入數(shù)據(jù),關(guān)閉
Open "a.txt" For Output As #1
Print #1, "ABCDEFG"; vbCrLf; "HIJK"
Close #1
'打開文件,并全部寫入新文件,關(guān)閉
Open "a.txt" For Input As #2
Open "b.txt" For Output As #3
Dim str As String
While (Not EOF(2))
Line Input #2, str
Print #3, str
Wend
Close
注:關(guān)于Visual Basic 6.0的文件操作資料來自于
如果您覺得我的回答幫助了您解決難題,別忘了采納哦,如果我的回答未能解決您的問題,您可以在互聯(lián)網(wǎng)上尋找更多的解決方案!
VB.NET打開二進制文件用fileopen完成,打開二進制文件的形式為:openmode.binary
讀取二進制文件用的是fileget方法,寫入二進制文件用的是fileput方法。
應(yīng)用示例:將一批隨機數(shù)保存在一個dat文件中,然后再將其提取到文本框中。
二進制文件的讀寫一批隨機數(shù)的存取,程序為:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim x, i, fn As Integer
Dim s As String = ""
fn = FreeFile()
FileOpen(fn, "d:\data.dat", OpenMode.Binary)
For i = 1 To 8
x = Int(Rnd() * 100)
s = s + Str(x)
FilePut(fn, x)
Next
FileClose(fn)
TextBox1.Text = s
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim x, fn As Integer
Dim s As String = ""
fn = FreeFile()
FileOpen(fn, "d:\data.dat", OpenMode.Binary)
Do While Not EOF(fn)
FileGet(fn, x)
s = s + Str(x) + " "
Loop
FileClose(fn)
TextBox1.Text = s
End Sub
數(shù)據(jù)庫與文本文件返回數(shù)據(jù)的方法不同.如果把文本文件比作一個Textbox 的話,那么數(shù)據(jù)庫更像是一個ListBox.使用文本文件時我們需要從整個Textbox中取出有用的信息,并進行處理,而Listbox則可以根據(jù)需要返回特定的某一項.
由于VB本身并不帶有可以訪問數(shù)據(jù)庫的類,所以我們需要引用一個包含能訪問數(shù)據(jù)庫的類來使用數(shù)據(jù)庫.這里我們采用ADODB,相比DAO和能訪問數(shù)據(jù)庫的API來說,它比DAO更靈活,更強大;而比起API,它更簡單易用,更適合初學(xué)者.而Access數(shù)據(jù)庫比起SQL,也相對簡單了很多,且能夠滿足中小型應(yīng)用程序的需要,所以我們在使用數(shù)據(jù)庫時,選擇了Access.
就像使用文本文件來存儲數(shù)據(jù)一樣,我們需要先設(shè)計好數(shù)據(jù)結(jié)構(gòu),只不過在設(shè)計Access數(shù)據(jù)庫的結(jié)構(gòu)時,我們需要用到其它的程序來進行詳細的規(guī)劃.建議采用的程序是office中的Access或VB自帶的VISDATA.
當(dāng)數(shù)據(jù)庫設(shè)計好了以后,我們可以開始"數(shù)據(jù)庫編程"了.
首先,我們需要引用ADO.具體的方法是,在"工程" -- "引用" 中,找到"Microsoft ActiveX Data Object *.* Library",這里的"*.*"是指的時ADO的版本號,一般來說,應(yīng)用程序或ActiveX控件都具有向下兼容性,所以我們盡可能選擇比較新的版本.以確保程序在能識別舊版本Access的同時,也能識別較新版本的Access.
然后我們需要在程序中創(chuàng)建一個對象.就好比我們在窗體上添加一個FileBox才能看到文件名一樣,只有創(chuàng)建了ADO對象,我們才能夠訪問數(shù)據(jù)庫.常用的對象有兩個,Connection和Recordset.
創(chuàng)建這兩個對象的具體方法是:
1.在引用后,使用New關(guān)鍵字,如
Private Conn As New ADODB.Connection
Private Reco As New ADODB.Recordset
2.在沒引用時,用CreateObject創(chuàng)建對象:
Dim Conn,Reco
Set Conn = CreateObject("ADODB.Connection")
Set Reco = CreateObject("ADODB.Recordset")
創(chuàng)建了對象之后,下一步我們要做的就是打開數(shù)據(jù)庫了.
先看下面的代碼,可以成功的打開數(shù)據(jù)庫.
Conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Main.mdb"
這句代碼打開了D盤中的Main.mdb這個數(shù)據(jù)庫.
Connection.Open方法的第一個參數(shù)是連接代碼,它將傳遞給系統(tǒng)的數(shù)據(jù)庫引擎.前半部分"Provider=Microsoft.Jet.OLEDB.4.0",它表示了數(shù)據(jù)庫的類型.不同的數(shù)據(jù)庫可能會不同.后半句"Source=d:\main.mdb"它表示了數(shù)據(jù)庫所在的絕對路徑.
打開數(shù)據(jù)庫之后,還要打開表.假如數(shù)據(jù)庫中有一個表,表名為"Users",字段有兩個,一個為用戶名,一個為密碼.那么看以下代碼.
1.想返回"Users"中,[用戶名]為"去年煙花"的[密碼]
Recordset.open "Select 密碼 From Users Where 用戶名='去年煙花'",Connection,1,1
之后我們就可以把用戶輸入的密碼進行比較,看是否允許登錄.
If Recordset.eof and Recordset.bof then
Msgbox "用戶不存在!",16
Else
If PassWord =Recordset("密碼").value then
msgbox "登錄成功!",64
Else
msgbox "密碼錯誤!",32
End If
End If
Recordset.Close
2.假設(shè)Admin已經(jīng)成功登錄系統(tǒng),我們想把所有的用戶名和密碼都顯示出來
Recordset.open "Select * From Users",Connection,1,1
這時,表已經(jīng)被打開,我們就用以下代碼把它顯示出來.
Do whlie Not Recordset.eof
Print "用戶名: " Recordset("用戶名").value "密碼: " Recordset("密碼").value
Recordset.MoveNext
Loop
Recordset.Close
由以上代碼示例可以看出,打開表時,可以只打開其中的一個字段,也可以打開所有.第一個參數(shù)是SQL語句.
Select [字段名] From 表名 [Where 條件]
這里的條件可以省略.且字段名也可以用"*"來代替所有字段.
需要注意的是,如果你用(1)中的方法打開,那么(2)后面顯示的代碼就不能再用在(1)中.因為(1)里并沒有打開[用戶名]字段,所以這一句Recordset("密碼")就沒有值存在,還有可能出錯.
后面的條件,可以用"="、""、""等運算符.比如 "Where ID 32".(這里假設(shè)[ID]為數(shù)字型.)
這是打開的部分.第二個很重要的部分就是查詢記錄.
數(shù)據(jù)庫它并不是把所有記錄全部放到一個變量中備用的.而是以"當(dāng)前記錄"的形式來返回一個值.所以我們想從中找到有用的信息,就必須要對信息進行定位/篩選.
定位:
移動到下一條 Recordset.MoveNext
移動到上一條 Recordset.MovePrevious
移動到最后一條 Recordset.MoveLast
移動到第一條 Recordset.MoveFrist
移動到某一條 Recordset.Move Number
篩選:
Recordset.Find "條件"
如:[用方法(2)打開表之后]
Private Sub Command1_Click()
Recordset.Find "用戶名=" "text1.text"
If Recordset.Eof True Then
Msgbox "該用戶的密碼是:" Recordset("密碼").value,64
Else
Msgbox "未找到該用戶的資料!",16
End If
End Sub
MoveNext 只有當(dāng)Eof不為True時,才可用,否則發(fā)生錯誤.而MovePrevious剛是Bof不為True時....
而只要Eof 和 Bof中有一個不為真時,也就是說只要有一條記錄時,它就可以使用.
Find 方法中的條件和Open時的第一個參數(shù)中的條件表述方法是完全一致的.當(dāng)在已打開的記錄集中,找不到該記錄時,Eof為True.找到則當(dāng)前的值就是符合條件的記錄.
第三個部分就是添加/修改記錄.
修改記錄很簡單,先按以上的方法找到相關(guān)記錄之后,給記錄賦值就可以了.
比如:[(修改密碼)按方法(1)打開表之后]
Recordset("密碼").value = "123456"
Recordset.Updata
需要注意的就是,在修改完成后,要調(diào)用Updata方法,這樣修改才能生效.
而添加記錄則可以用以下代碼來實現(xiàn):
Recordset.addnew
Recordset("用戶名").value = "Admin"
Recordset("密碼").value = "Admin"
Recordset.Updata
這里,先要調(diào)用Addnew方法,增加一條新記錄,然后對這個新記錄中的各字段賦值,最后再調(diào)用Updata方法.
到這里就差不多了,最后說一下上面提到的幾個方法.
Recordset.Open SQL語句,數(shù)據(jù)源,游標類型,打開方法
SQL語句不用說了,就是Select那啥的,目的就是按要求從表中返回數(shù)據(jù)
數(shù)據(jù)源就是一個打開之后的Connection對象.
去他媽的游標類型,填1就可以了 [偷笑ing]
打開方法對應(yīng)了幾個常數(shù),具體哪幾個可以從對象瀏覽器里看.
對應(yīng)數(shù)值的意義:
1 只讀 2 獨占 3 可寫 4 自已可寫,別人可讀
Connection.open 連接代碼,服務(wù)器用戶名,密碼
這里的連接代碼就不在多說了,服務(wù)器用戶名,密碼只有在連接遠程數(shù)據(jù)庫時才用到.
樓主可以去我的論壇看,里面有圖片,看起來更方便些,下面這個留言本絕對可行的
一、安裝與調(diào)試
常聽朋友感嘆ASP程序難學(xué)不易懂,不過我起初學(xué)習(xí)這門技術(shù)的時候也有過這樣的感悟。從今天開始,我將以我學(xué)ASP的經(jīng)驗來做一個簡單的ASP留言本,這個留言本用了Access數(shù)據(jù)庫,所以務(wù)必請大家要跟我一起做的朋友都安裝好Office軟件,相信各位自己的電腦上都有了。好了,開始。
創(chuàng)建ASP的運行環(huán)境(安裝IIS)
IIS(Internet Information Service)是構(gòu)建ASP站點所必須的,所以,我們應(yīng)該先確認自己的電腦已安裝了IIS信息服務(wù),如果沒有安裝好的話,請按以下步驟:
1、打開“控制面板”
2、雙擊“添加/刪除程序”
3、單擊“添加/刪除Windows組件”,打開添加/刪除Windows組件對話框:
3、從下拉的列表中選擇“Internet 信息服務(wù)(IIS)”單擊“下一步”:
4、出現(xiàn)組件安裝進度窗口,如彈出需要安裝盤的話,放入Windows2000安裝盤,按提示操作即可。直至最后安裝完畢。
二、設(shè)計數(shù)據(jù)庫
ASP程序本身并不能儲存數(shù)據(jù),眾所周知,留言本有以下信息需要保存:留言者姓名、聯(lián)系方式、留言內(nèi)容等等。因為ASP并不能儲存數(shù)據(jù),所以數(shù)據(jù)庫在這種環(huán)境之下就產(chǎn)生了。數(shù)據(jù)庫的種類也很多,針對不同的程序也有適用于它的數(shù)據(jù)庫,比如Access和Ms SQL就比較適用ASP和ASP.net程序,至于其它的數(shù)據(jù)庫和程序,就不屬于本文所討論的問題了,有興趣的朋友可以查看其它一些資料。
那么既然Access和MS SQL都適用ASP,那么具體又如何來選擇呢?我們可以打一個比方:比如釘一枚小釘子,聰明的人一定不會用一個大的棒槌,而是選擇小的鐵錘,雖然用大的棒槌也一樣的可以把釘子釘進去,可是沒有人愿意這樣做。
數(shù)據(jù)庫也一樣:Access比較適用小型的應(yīng)用,而MS SQL則適用于大中型的數(shù)據(jù)庫應(yīng)用,所以要做一個留言本,理所當(dāng)然是選擇Access更好一些,但是如果你決心使用MS,沒有人會極力阻止你。好了,廢話少說,切入正題,下面開始創(chuàng)建數(shù)據(jù)庫。
Access是微軟office辦公軟件中的其中一個,默認的安裝Office是有這個Access的,好了,打開程序,開始了,GO!
進入實戰(zhàn)了。打開程序后,出現(xiàn)一個對話框,這里我們選擇第一個選項”空Access數(shù)據(jù)庫”點擊確定,彈出一個新建數(shù)據(jù)庫的文件框,選擇你上次你建的站點目錄,起個data的文件名,點擊創(chuàng)建,OK! 雙擊”使用設(shè)計器創(chuàng)建表”打開表創(chuàng)建窗口”如圖
創(chuàng)建表的結(jié)構(gòu)如下表:
字段名稱 數(shù)據(jù)類型 備注(筆者注釋)
id 自動編號 設(shè)置“自動編號”
user 文本 留言者姓名
qq 數(shù)字 留言者的QQ,因為QQ號是由數(shù)字組成
email 文本 留言者的電子郵件
content 備注 留言內(nèi)容
data 日期/時間 留言時間,設(shè)定默認值為Now()
數(shù)據(jù)庫設(shè)計好了以后,可以直接在數(shù)據(jù)庫里添加兩條記錄,以后測試時候用!
三、連接數(shù)據(jù)庫
在上一節(jié),我們已經(jīng)為我們的程序創(chuàng)建了一個數(shù)據(jù)庫,在這一節(jié)中,我們來用ASP把程序和數(shù)據(jù)庫連接起來,以后就可以連接到數(shù)據(jù)庫、在ASP中顯示數(shù)據(jù)庫中的數(shù)據(jù)以及更復(fù)雜的插入、修改和刪除。
一起看以下代碼,這就是ASP程序中常用的連接數(shù)據(jù)庫的代碼:
%
set conn=server.createobject("adodb.connection")
connstr="Provider=Microsoft.jet.oledb.4.0;data source="server.mappath("data.mdb")
conn.open connstr
%
解釋一下以上代碼:
% 這是ASP程序的起始
set conn=server.createobject("adodb.connection") 在服務(wù)器上創(chuàng)建了一個連接數(shù)據(jù)庫的對象
connstr="Provider=Microsoft.jet.oledb.4.0;data source="server.mappath("data.mdb") 告訴ASP數(shù)據(jù)庫的接接方法以及路徑
conn.open connstr 創(chuàng)建了對象后就用來打開數(shù)據(jù)庫進行連接
% 一切OK了!結(jié)束ASP程序
將上面的代碼另存為conn.asp文件,放在服務(wù)器目錄下面就可以了。怎么樣,簡單吧?
四、制作留言本首頁
前面我們已經(jīng)連接好了數(shù)據(jù)庫,就要讓它在這里發(fā)揮一下作用了,這一節(jié)將講述如何將數(shù)據(jù)庫里的數(shù)據(jù)用ASP讀取出來,在頁面中顯示出來,這樣就等于是查看留言本了。
利用DW制作如下頁面(這里我就不講如何去做這個頁面了,最后我將會給出HTML代碼下載)
將制作好的文件存為index.asp,下面就創(chuàng)建數(shù)據(jù)記錄集,用來顯示數(shù)據(jù)庫的數(shù)據(jù)到這個頁面中:
用記事本打開index.asp,在頁頭加入以下代碼:
%@LANGUAGE="VBScript" codepage="936"%
!--#include file="conn.asp"--
%
set rs=server.createobject("adodb.recordset")
sql="select user,qq,email,content,data from main order by id desc"
rs.open sql,conn,1,1
%
代碼拷貝框
%@LANGUAGE="VBScript" codepage="936"%
!--#include file="conn.asp"--
%
set rs=server.createobject("adodb.recordset")
sql="select user,qq,email,content,data from main order by id desc"
rs.open sql,conn,1,1
%
[Ctrl+A 全部選擇 然后拷貝]
解釋一下:
第一行,表明ASP使用的是VB腳本
第二行,是用include包含文件,這里包含的是數(shù)據(jù)庫連接文件。
第三行,ASP程序開始
第四行,利用Server內(nèi)置對象創(chuàng)建一個記錄集
第五行, SQL語句,這里的意思是選擇數(shù)據(jù)庫中的user,qq,email,content,data字段,指定該數(shù)據(jù)表的名稱是“main”數(shù)據(jù) 的排列順序是倒序。
第六行,用剛才創(chuàng)建的名為rs的記錄集打開數(shù)據(jù)庫,設(shè)置屬性為只讀(1,1為只讀數(shù)據(jù),1,3為插入數(shù)據(jù),2,3是修改數(shù)據(jù)。
這樣就打開了數(shù)據(jù)庫,接下來就可以顯示了。
將“留言人”代替為“%=rs("user")%
“時間”代替為“%=rs("data")%
“留言內(nèi)容在此”代替為“%=rs("content")%
“QQ”鏈接到:;%=rs("qq")%
“郵件”鏈接到:mailt%=rs("email")%
最后將“填寫留言”鏈接 add.asp “管理留言”鏈接 admin.asp
好了,再次保存,瀏覽看看!
怎么了?只顯示一條記錄?原來我們在數(shù)據(jù)庫里添加了兩條記錄的哦!還有一條呢?別急,因為我們沒有指定ASP循環(huán)顯示,所以就只有一條啦。。。
在剛才的代碼后面添加一行
%do while not rs.eof%
并在頁面的第一個表格的末尾加上
%
rs.movenext
loop
%
上面的代碼就是說用rs記錄集指針一條一條往下一條移動,直到末尾,loop是循環(huán)的意思。。哈哈,再次瀏覽這個文件
看明白了嗎,這樣就可以讓數(shù)據(jù)庫中的數(shù)據(jù)全部顯示在頁面中了。
五、制作添加留言頁面,實現(xiàn)留言功能
我們是做的一個留言本,實現(xiàn)留言的功能就十分重要了,要不然就算不上留言本了,接下來就一起來實現(xiàn)這個功能。
用DW制作以下這樣的頁面:
設(shè)置表單的屬性如下:
姓名:設(shè)置為單行文本域,名稱為“user”
QQ號:設(shè)置為單行文本域,名稱為“qq”
郵件:設(shè)置為單行文本域,名稱為“email”
內(nèi)容:設(shè)置為多行文本域,名稱為“content”
最后將表單的“Action”動作指向addsave.asp就可以了。
保存文檔名為add.asp,OK!下一步!
表單是做好了,但是還需要后臺程序的支持,一起來使用ASP編寫一個添加留言處理程序,添加留言代碼:
%@LANGUAGE="VBScript" codepage="936"% 表明ASP使用的是VB腳本
!--#include file="conn.asp"-- 是用include包含文件,這里包含的是數(shù)據(jù)庫連接文件
%
set rs=server.createobject("adodb.recordset") 利用Server內(nèi)置對象創(chuàng)建一個記錄集
sql="select user,qq,email,content,data from main" SQL語句,上節(jié)有詳解
rs.open sql,conn,1,3 用剛才創(chuàng)建的名為rs的記錄集打開數(shù)據(jù)庫,設(shè)置屬性為插入數(shù)據(jù)
rs.addnew 用記錄集新添加一條數(shù)據(jù)
user=request.form("user") 請求表單的變量,定義變量為user,這里request.form是請求表單的意思
qq=request.form("qq") 請求表單的變量,定義變量為qq,這里request.form是請求表單的意思
email=request.form("email") 請求表單的變量,定義變量為email,這里request.form是請求表單的意思
content=request.form("content") 請求表單的變量,定義變量為content,這里request.form是請求表單的意思
rs("user")=user 將請求到的表單值傳向記錄集中代表user字段的名稱
rs("qq")=qq 將請求到的表單值傳向記錄集中代表qq字段的名稱
rs("email")=email 將請求到的表單值傳向記錄集中代表email字段的名稱
rs("content")=content 將請求到的表單值傳向記錄集中代表content字段的名稱
rs.update 更新一下數(shù)據(jù)庫中的數(shù)據(jù)。
rs.close 關(guān)閉記錄集
set rs=nothing 銷毀記錄集
conn.close 關(guān)閉數(shù)據(jù)庫連接
set rs=nothing 銷毀數(shù)據(jù)庫連接
%
代碼拷貝框
%@LANGUAGE="VBScript" codepage="936"% 表明ASP使用的是VB腳本
!--#include file="conn.asp"-- 是用include包含文件,這里包含的是數(shù)據(jù)庫連接文件
%
set rs=server.createobject("adodb.recordset") 利用Server內(nèi)置對象創(chuàng)建一個記錄集
sql="select user,qq,email,content,data from main" SQL語句,上節(jié)有詳解
rs.open sql,conn,1,3 用剛才創(chuàng)建的名為rs的記錄集打開數(shù)據(jù)庫,設(shè)置屬性為插入數(shù)據(jù)
rs.addnew 用記錄集新添加一條數(shù)據(jù)
user=request.form("user") 請求表單的變量,定義變量為user,這里request.form是請求表單的意思
qq=request.form("qq") 請求表單的變量,定義變量為qq,這里request.form是請求表單的意思
email=request.form("email") 請求表單的變量,定義變量為email,這里request.form是請求表單的意思
content=request.form("content") 請求表單的變量,定義變量為content,這里request.form是請求表單的意思
rs("user")=user 將請求到的表單值傳向記錄集中代表user字段的名稱
rs("qq")=qq 將請求到的表單值傳向記錄集中代表qq字段的名稱
rs("email")=email 將請求到的表單值傳向記錄集中代表email字段的名稱
rs("content")=content 將請求到的表單值傳向記錄集中代表content字段的名稱
rs.update 更新一下數(shù)據(jù)庫中的數(shù)據(jù)。
rs.close 關(guān)閉記錄集
set rs=nothing 銷毀記錄集
conn.close 關(guān)閉數(shù)據(jù)庫連接
set rs=nothing 銷毀數(shù)據(jù)庫連接
%
[Ctrl+A 全部選擇 然后拷貝]
將以上文件存為addsave.asp,測試下!咦?怎么填好提交以后就出現(xiàn)空白了,為什么?這是因為在addsave.asp中沒有設(shè)置數(shù)據(jù)成功提交好后的轉(zhuǎn)向頁面,這里不用做那么復(fù)雜的,只要做一個刷新頁面就行了,在程序的后面加上:
meta http-equiv="refresh" content="2;URL=index.asp"
然后在頁面中添加提示信息,比如:“您的留言已經(jīng)成功提交,2秒鐘后將自動返回留言本首頁”
好了,這個留言的功能總算實現(xiàn)了,最后再測試下,看看效果!
OK!
六、制作管理登陸頁面
留言本的管理功能對于留言本來說就不言而喻了,像論壇的登陸功能就是一個很好的例子,不過我們做留言本基本上有刪除功能就行了,寫這個教程是為了更多的ASP入門者更好的了解ASP,所以旨在學(xué)習(xí)用,當(dāng)然也可以在這基礎(chǔ)上添加更多的功能,比如回復(fù)留言者。
好了,開始了,還是按照以前的,用Dreamweaver做一個登陸頁面,如下圖:
把用戶名的表單名稱設(shè)置為admin,密碼的表單名稱設(shè)為password,把動作指向checkpass.asp,,存admin.asp這樣登陸頁面就好了,
下面就做檢測密碼的ASP程序了,看以下代碼解釋:
!--#include file="conn.asp"-- 把conn.asp包含進來連接數(shù)據(jù)庫
% ASP起始
admin=request.form("admin") 定義admin的值是表單傳過來的用戶名域名稱admin
password=request.form("password") 定義admin的值是表單傳過來的用戶名域名稱admin
if admin="" or password="" then 這句的意思是假如用戶名和密碼沒有輸入的話那么執(zhí)行下一句
response.Write("script language=javascriptalert(請?zhí)顚懲暾?);history.go(-1)/script") 用javascript腳本提示用戶
end if 結(jié)束if語句
sql="select * from admin where admin="admin" and password="password"" 這句很重要,我們放到后面講
set rs=conn.execute(sql) 設(shè)定記錄集rs,用conn執(zhí)行SQL語句
if rs.eof or rs.bof then 當(dāng)沒有符合篩選結(jié)果時,則執(zhí)行下面的句子
response.write "script language=javascript"
response.write "alert(用戶或密碼不對!);"
response.write "javascript:history.go(-1);"
response.write "/script" 用javascript腳本提示用戶
else 如果符合條件的時候
session("admin")=admin 新建session,值等于表單傳來的用戶名
response.redirect "mymanage.asp" 轉(zhuǎn)向到mymanage.asp,進入管理頁
end if 結(jié)束if語句
% ASP結(jié)束
代碼拷貝框
!--#include file="conn.asp"-- 把conn.asp包含進來連接數(shù)據(jù)庫
% ASP起始
admin=request.form("admin") 定義admin的值是表單傳過來的用戶名域名稱admin
password=request.form("password") 定義admin的值是表單傳過來的用戶名域名稱admin
if admin="" or password="" then 這句的意思是假如用戶名和密碼沒有輸入的話那么執(zhí)行下一句
response.Write("script language=javascriptalert(請?zhí)顚懲暾?);history.go(-1)/script") 用javascript腳本提示用戶
end if 結(jié)束if語句
sql="select * from admin where admin="admin" and password="password"" 這句很重要,我們放到后面講
set rs=conn.execute(sql) 設(shè)定記錄集rs,用conn執(zhí)行SQL語句
if rs.eof or rs.bof then 當(dāng)沒有符合篩選結(jié)果時,則執(zhí)行下面的句子
response.write "script language=javascript"
response.write "alert(用戶或密碼不對!);"
response.write "javascript:history.go(-1);"
response.write "/script" 用javascript腳本提示用戶
else 如果符合條件的時候
session("admin")=admin 新建session,值等于表單傳來的用戶名
response.redirect "mymanage.asp" 轉(zhuǎn)向到mymanage.asp,進入管理頁
end if 結(jié)束if語句
% ASP結(jié)束
[Ctrl+A 全部選擇 然后拷貝]
將以上代碼保存為checkpass.asp
這樣,用戶在admin.asp頁面中輸入用戶名和密碼后,就把用戶名和密碼值傳給checkpass.asp處理,當(dāng)用戶名和密碼的值和數(shù)據(jù)庫中的字段相匹配時,就進入mymanage.asp這個管理頁面,同時建一個session,這個session的會話變量將在后面起作用,
七、制作管理頁面
上節(jié)中講的是制作登陸頁面和檢測用戶,當(dāng)用戶名和密碼正確時就轉(zhuǎn)到管理頁面,好了,開始實現(xiàn)它。
其實這個留言本的管理頁面和用戶直接看到的首頁沒有多大的區(qū)別,只是用了Session會話變量用作保護和增加了一個刪除鏈接,當(dāng)點擊這個鏈接的時候,就會自動刪除這條留言,好了,其本的目的知道了,那就GO!
剛才講了,這個頁面和首頁的index.asp相似,那么就先復(fù)制就行了,然后再改一下
首先找到下面這句:
sql="select user,qq,email,content,data from main order by id desc"
把它改為
sql="select id,user,qq,email,content,data from main order by id desc"
這樣,就選取到了id這個自動編號的值,以便刪除留言時鎖定這個id。
然后在“郵件”這個鏈接后面增加一個鏈接“刪除”,鏈接:del.asp?id=%=rs("id") ,修改代碼后為a href="del.asp?id=%=rs("id")%" onclick="return confirm(是否確定刪除本留言?);"刪除/a 這樣,待會我們做del這個頁的時候,就會知道為什么了!
改過后存為mymanage.asp
現(xiàn)在打開瀏覽器看看!
怎么不用輸入用戶名和密碼都可進入呀?別急,上節(jié)中,我們不是建了一個session的會話變量,這時就派上用場了,直接用記事本打開。在%@LANGUAGE="VBScript" codepage="936"%這句的后面加上%if session("admin")"" then%這句,在末尾寫上:
%
else
response.Redirect("admin.asp")
end if%
下面來講解一下。
%if session("admin")"" then% 就是說如果session這個("admin")的值不是空的話就執(zhí)行。
%
else
response.Redirect("admin.asp")
end if% 為空的話就轉(zhuǎn)向登陸頁,重新登陸,這樣的話,直接輸入網(wǎng)址的話就會跳到admin.asp,簡單吧!
八、刪除留言
上節(jié)我們增加了一個刪除留言的鏈接,以下是這個del.asp的代碼
!--#include file="conn.asp"--
%
set rs=server.createobject("adodb.recordset")
id=Request.QueryString("id")
sql="select * from main where id="id
rs.open sql,conn,2,3
rs.delete
rs.update
%
很明了吧,才幾句,第1、2、3句都不用我解釋了,大家都在上幾節(jié)中明白了。
第4句:
id=Request.QueryString("id") 用id取值字符串中傳的id,回頭看一下刪除的鏈接:del.asp?id=%=rs("id")% 就是這個鏈接才把id的值傳來的,%=rs("id")%是讀取數(shù)據(jù)庫中的自動編號字段中的id。
第5句:
用sql定義SQL語句,這里的*是通配符,表示所有,而Where有點像我們漢語中的“當(dāng)”,整句話的意思是選擇所有來自表名為main的字段,它的條件是當(dāng)數(shù)據(jù)庫中的id字段是字串所傳來的id。如果這個沒有的話這個一時間不明白也不要緊,慢慢接觸就知道了。
第6句是打開符合條件的記錄,確切的講不應(yīng)該叫記錄集了,因為經(jīng)過我們這樣篩選的話,記錄絕對是一條,2,3指定可以對數(shù)據(jù)庫中的數(shù)據(jù)進入修改。
第7、8句
rs.delete 看了就明白了,原來這才是整個程序的精髓,就是執(zhí)行刪除了。
rs.update 這是更新數(shù)據(jù)庫中的表,刪除后就更新。
最后大家自己用rs.close和conn.close釋放。
經(jīng)過些學(xué)習(xí),大家應(yīng)該對ASP有所了解和認識了,這個做ASP留言本的教程就到此結(jié)束了。歡迎大家到新視野QQ群里面共同討論學(xué)習(xí)。