ADO.NET數據庫訪問入門

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的基本用法就是這些,希望對你有所幫助。

發佈了67 篇原創文章 · 獲贊 2 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章