天天看點

ASP.NET資料庫使用精典-----讀取資料庫中資料

讀取資料庫中的資料

在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讀取資料大緻需要以下六個步驟:

(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

    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