讀取資料庫中的資料
在ASP.NET中,讀取資料庫中的資料可以使用datareader 和dataset兩種方法,兩者差異如下:
使用dataset對象讀取資料大致需要以下五個步驟:
(1)建立資料庫連結,可以選用sqlconnection或者oledbconnection
(2)將查詢儲存在sqldataadapter或者oledbdataadapter對象中
(3)使用dataadapter對象的fill方法將資料填充到dataset中的datatable中
(4)為datatable對象建立dataview對象以顯示資料,這一步可以省略。
(5)將dataview或者dataset綁定到server control上。
使用datareader讀取資料大致需要以下六個步驟:
(1)建立資料庫連結,可以選用sqlconnection或者oledbconnection
(2)使用connection對象的OPEN方法開啟資料庫連結
(3)將查詢儲存在sqlcommand或者oledbcommand對象中
(4)調用command對象的executereader方法,將資料讀入datareader對象中
(5)調用datareader的READ或者GET方法讀取一筆資料,以便顯示
(6)調用connection對象的close方法,關閉資料庫連結
1 用datareader讀取資料
前面我們已經學會了建立資料庫連結和開啟資料庫,但是執行sql指令及開啟表則必須依賴command對象,使用command對象執行sql指令的程式大致如下:
dim cmd as oledbcommand '聲明一個command對象
' 建立command對象,並且指定SQL語句
response.write(server.mappath("user.mdb"))
cmd=new oledbcommand("select * from reg " , comm)
dim rd as oledbdatareader '聲明一個datareader對象
rd=cmd.executereader() '執行SQL指令,並將其結果設定給datareader
在建立command對象的語句中,conn參數為一個connection,第一個參數為SQL的指令。
command對象在執行SQL指令時需要調用executereader方法,executereader方法會把SQL指令的返回結果賦給datareader對象
下面使用datareader對象來讀取資料庫中的資料:
dim i as integer
while rd.read()
response.write("<ul>")
for i=0 to rd.fieldcount-1
response.write("<li>" & rd.getname(i) & "=" & rd.item(i))
next
response.write("</ul>")
end while
Getitem(index)方法用於擷取欄位名,item(index)用於擷取欄位值。
使用datareader對象需要注意以下屬性:
● read方法,讀取單行資料,若讀取成功,會將所讀取的單行資料存放在datareader對象中,然後自動將光榮榜標移到下一行資料,返回true,如果讀取失敗,返回false,據此可以使用while語句判斷是否已經讀取到資料庫的最後一條記錄。此外值得注意的是datareader對象讀取完一條資料記錄後會自動將游標移到下一條記錄,不需要使用move next語句。這是ADO.NET和ADO比較大的區別。
●fieldcount屬性工作表示datareader對象中記錄的列數,值得注意的是item屬性的索引值是從0開始的,所以最大的索引值是fieldcount-1
2 使用dataset讀取資料
datareader對象只能一行一行讀取資料記錄,如果對資料進行大規模處理時使用datareader就有些捉襟見肘了,它的優點是節省記憶體,使用dataset對象最大優點就是能同時將整個表讀入記憶體,所以最適合進行資料繫結。如使用datagrid控制項來顯示資料時,使用dataset讀取資料是最好的選擇。但它的最大缺點是比較消耗記憶體
(1)使用dataadapter和dataset
使用dataset對象一般需要和dataadapter對象聯合使用
將一個表填入dataset對象
dim conn as oledbconnection '聲明一個oledbconnection對象
conn=new oledbconnection() '建立一個oledbconnection對象
'設定連結字串connectionstring
conn.connectionstring="provider=microsoft.jet.oledb.4.0;" & " data source=" & "server.mappath("user.mdb")
conn.open()
'建立dataadapter對象,並指定SQL語句
da=new oledbdataadapter("select * from reg" ,conn)
dim ds as dataset '聲明一個dataset對象
da.fill(ds,"註冊使用者表") ' 在dataset對象中註冊一個名為“註冊使用者表”的資料表
(2)用datatable操作資料
在瞭解了dataset對象和datatable對象的關係以後,下面將使用datatable來操作資料
如果想藉助datatable對象來讀取表的內容,必須使用以下兩種屬性:
● columns屬性,資料列資訊,此屬性為datacolumn對象構成的集合對象
● rows屬性 資料行資訊,此屬性為datarow對象所構成的集合對象
如果使用迴圈來讀取所有資料,就可以達到使用datareader對象讀取資料的效果,代碼大致如下:
for i=0 to dt.rows.count-1
response.write("<ul>")
for j=0 to dt.columns.count-1
str="<li>" &dt.columns(j).caption
str=str & "=" dt.rows(i).item(j)
response.write(str)
next
response.write("</ul>")
next