ADO.NET數據庫訪問入門
.NET程序使用ADO.NET對象訪問數據庫,因此,要在.net程序中訪問數據,需要了解ADO.NET的基本知識。
ADO.NET是由ADO數據訪問模型演變而來的。它提供2種連接數據庫的方法,分別是連接式和非連接式的。連接式訪問時,應用程序與數據庫一直保持連接,而不管有沒有數據交換。非連接式訪問時,只有當應用程序需要數據時才連接到數據庫,數據交換完成後又立刻斷開。因此非連接式訪問可以減少網絡流量(連接遠程數據庫時),.net推薦使用非連接式的訪問。
1.連接式訪問方法
先看看下面的流程:
數據庫-----Connection對象----Command對象---DataReader對象-----顯示數據
Connection對象就是與數據庫建立連接的對象,它是首先應該創建的對象,創建Connection對象時,需要給出數據庫的路徑,名稱,用戶名和密碼(如果有的話)。它可以細分爲SqlConnection和OleDbConnection
Command對象就是用來向數據庫發出SQL命令的對象。在ADO.NET中有2種Command對象:SqlCommand和OleDbCommand,前者是SQL數據庫專用的,後者是通用的。
DataReader對象:用Command對象執行一個SQL命令後就會返回一個DataReader對象,因此查詢結果就在DataReader對象裏。DataReader對象也分爲SqlDataReader和OleDbDataReader,前者是SQL數據庫專用的,後者是通用的。
2.非連接式訪問方法
先看看下面的流程:
數據庫-----Connection對象------DataAdaper對象-----DataSet對象------顯示數據
Connection對象:含義與連接式訪問方法中相同
DataAdaper對象:類似連接式訪問方法中的Command對象,可以發出SQL命令,但是DataAdaper對象的功能更多。並且它也細分爲SqlDataAdaper和OleDbDataAdaper
DataSet對象:用DataAdaper對象執行SQL命令後,需要把返回的結果填充到DataSet對象。DataSet對象是在內存中的一塊緩衝區,有點像是本地的一個小數據庫。DataSet對象可以像數據庫一樣包含很多表,每個表用DataTable對象表示。
下面以代碼示例如何用2種連接方法訪問ACCESS數據庫:
首先,訪問數據庫需要引system.Data命名空間,還要根據數據庫的類型引用system.Data.OleDb (普通數據庫)或者system.Data.SqlClient (SQL數據庫)命名空間。能舉需要可能還應該引用一下命名空間:system.Data.Commom ,system.Data.SqlTypes
假設一ACCESS數據庫,路徑爲d:/data.mdb ,其中有表text,包含字段name
連接式訪問:
Dim a As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/data.mdb")
'連接到數據庫
a.Open() '打開數據庫
Dim b As New OleDbCommand("select * from [text]", a)
'定義SQL命令.注意OleDbCommand對象對SQL命令的語法檢查較爲嚴格,應儘量採用標準寫法
'此處如果寫成select * from text 將是錯誤的
Dim c As OleDbDataReader = b.ExecuteReader
' 執行SQL命令並把結果返回c ,如果執行的SQL命令不需要返回記錄,請不要定義c,並使用b.ExecuteNonQuery
'Read命名用來向下移動記錄指針,在讀取第一條記錄前,先要執行一次Read
While c.Read
'Read命名用來向下移動記錄指針
'如果指針到了記錄末尾,c.Read返回false
'注意不要用do...loop循環,否則會出錯
MessageBox.Show(c("name").ToString)
'輸出記錄中的name字段
End While
c.Close()
a.Close() '記得關閉連接
非連接式訪問:
Dim a As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/data.mdb")
'連接到數據庫的信息
Dim b As New OleDbDataAdapter("select * from [text]", a)
'定義SQL命令
Dim MyCommandBuilder As New OleDbCommandBuilder(b) '使用該對象協調對數據庫的更改,如果只是查看數據,不更新數據,可以不創建這個對象
b.MissingSchemaAction = MissingSchemaAction.AddWithKey '設置爲當使用fill時檢索主鍵信息,如果只是查看數據,不更新數據,可以不寫這行
Dim c As New DataSet
b.Fill(c, "t1")
'執行SQL命令,並把執行結果裝入c,同時給本次執行結果的數據取個名字t1.因爲c裏可以裝入很多次的執行結果,所以要爲每個結果指定名字以便區分
Dim d As DataRow '定義一個記錄對象
For Each d In c.Tables("t1").Rows
'可以使用For Each...Next循環來遍歷c中的記錄。c.Tables("t1")表示t1這個執行結果,其實就是一個臨時表
MessageBox.Show(d("name").ToString)
Next
如果要增加記錄,可以這樣:
d = c.Tables("t1").NewRow()
d("name") = "cat" '添加數據內容
c.Tables("t1").Rows.Add(d) '將記錄添加到臨時表中
c.AcceptChanges() '提交臨時表更改
b.Update(c, "t1") '將更新後的臨時表提交到數據庫
注意使用Update提交到數據庫時,根據情況可能需要設置DataAdapter的insertcommand等屬性,一般情況可以用CommandBuilder對象自動設置,並且注意表中是否有主鍵。
修改記錄可以使用類似DateSet.Tables("臨時表名稱").Rows(記錄的行數)("字段名")="修改後的值" 這樣的語句完成,最後記得UpData.刪除記錄使用Delete方法,其它一樣。
ADO.NET的基本用法就是這些,希望對你有所幫助。