1. <wbr id="m8vu6"></wbr>

      <del id="m8vu6"><center id="m8vu6"><source id="m8vu6"></source></center></del>
        <p id="m8vu6"><sub id="m8vu6"></sub></p>

        VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
        SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
        當前位置:
        首頁 > 編程開發 > VBnet >
        • vb.net教程之在Visual Basic.NET使用ADO訪問數據庫

        • 2017-06-07 13:50 來源:未知
        .NET中以 ADO.NET取代以前的ADO。用慣ADO的程序員怎樣在.NET中怎樣應用ADO呢?本人經過不斷的摸索,發現在.NET中ADO一樣可以用,并且很好用。現在結合Visual Basic.NET強大的類開發功能,本人將ADO開發成組件使用,效果非常理想。我使用的方法如下:

          啟動Visual Studio.NET。在新建項目中選擇Visual Basic項目,在模板中選擇類庫,在名稱中輸入類庫名稱如DataAccess.確定后,則進入類庫開發環境中,把Class1換名為ADOAccess。

          在項目菜單中加入引用,選擇COM頁,找到 Microsoft ActionX Data Object 20 Library 或更高版本。COM選項是Microsoft為了區分現在的.NET,兼容以前的開發方式而設置的,凡是.NET之前的組件都可在COM頁中可找到。

          在類名上面寫上Imports ADODB.Connection; Imports ADODB.Recordset ;Imports ADODB.CursorLocationEnum; Imports System.DBNull 4條引用語句,這里分別是引用ADO,ADO的宏定義,設置空值函數的來源。

          在類中定義一局部連接對象變量。 Private mCnnDB As New ADODB.Connection()
        然后定義連接Access數據庫的過程. Access 數據庫用adUseClient指定,通過Microsoft.Jet.OLEDB數據訪問方式訪問數據庫,Microsoft.Jet.OLEDB又有多種版本,其中4.0是最高版本,它能訪問ACCESS 2000,所以這里的數據提供者指定為Microsoft.Jet.OLEDB.4.0。指定了本地數據庫和提供者后,就可打開一個數據庫了,用open方法實現。完整的代碼如下:

        '作用: 連接Access數據庫
        '參數: DBName 數據庫名
        Public Sub ConnAccess(ByVal DBName As String)
        Dim strDB As String
        mCnnDB.CursorLocation = adUseClient
        mCnnDB.Provider = "Microsoft.Jet.OLEDB.4.0"
        mCnnDB.Open(DBName, "Admin")
        End Sub 

          在ODBC中設置DNS,在下面的ConnectionString中指定用戶名和密碼,最后用open方法打開。由于ODBC分有用戶名和無用戶名兩者,我們必須分別實現,借助類的函數名重載功能,我們編寫兩個同名的過程,完整的代碼如下:

        '作用: 連接ODBC數據庫(不需指定用戶和密碼 )
        '參數:dsnName為ODBC名
        Public Sub ConnODBC(ByVal dsnName As String)
        mCnnDB.Provider = "MSDASQL"
        mCnnDB.ConnectionString = "Data Source='" & dsnName & "'"
        mCnnDB.Open()
        End Sub

        '作用: 連接ODBC數據庫(需指定用戶和密碼 )
        '參數:dsnName ODBC名,UserID 用戶名,UserPwd 用戶密碼
        Public Sub ConnODBC(ByVal dsnName As String, ByVal UserID As String, ByVal UserPwd As String) mCnnDB.Provider = "MSDASQL"
        mCnnDB.ConnectionString = "Data Source='" & dsnName & "'User ID='" & UserID & "';" & _
        "Password='" & UserPwd & "
        mCnnDB.Open()
        End Sub 


        SQL Server數據庫是Microsoft開發的一種廣泛使用的后臺數據庫。訪問SQL Server可以通過指明ODBC驅動程序為SQL Server來實現,即在連接字符串中要有driver={SQL Server},由于它是后臺數據庫,所以必須指明SQL Server所在的計算機名,通常把它稱為服務器,下面的ServerName就說明這點,然后指明是連接哪個數據庫。其它的類似上面的ODBC。SQL Server的用戶分為WIN NT 和授權用戶,WIN NT用戶是不需要指定用戶名和密碼的超級用戶,否則要指明用戶名和密碼,這決定于SQL Server數據庫管理員,在此不作詳細說明,完整的代碼如下:


        '作用: 連接SQL Server數據庫
        '參數:ServerName 服務器名,DBName 數據庫名
        Public Sub ConnSQLServer(ByVal ServerName As String, ByVal DBName As String)
        With mCnnDB
        .ConnectionString = "uid=;pwd= ;driver={SQL Server};" & _
        "server=" & ServerName & _
        ";database=" & DBName
        .Open()
        End With
        End Sub
        '作用: 連接SQL Server數據庫
        '參數:ServerName 服務器名,DBName 數據庫名,UserID 用戶名,UserPwd 用戶密碼
        Public Sub ConnSQLServer(ByVal ServerName As String, ByVal DBName As String,ByVal UserID As String, ByVal UserPwd As String)
        With mCnnDB
        .ConnectionString = "uid='" & UserID & "';pwd='" & UserPwd &"';driver={SQL Server};" & _
        "server=" & ServerName & _
        ";database=" & DBName
        .Open()
        End With
        End Sub


          Oracle數據庫是目前最有影響的一種廣泛使用的后臺數據庫。訪問Oracle先指明其提供者MSDAORA。Oracle與Sql Server不同的是它不是通過數據庫來管理的,所以它不需指明數據庫,但它連接時必須指明用戶,即使是超級用戶也如此,這是它的安全性能高于Sql Server的理現之一,所以我們只須編寫一個過程。其它類似。完整的代碼如下:


        '作用: 連接Oracle數據庫
        '參數:ServerName 服務器名,DBName 數據庫名,UserID 用戶名,UserPwd 用戶密碼
        Public Sub ConnOracle(ByVal ServerName As String, ByVal UserID As String, ByVal UserPwd As String)
        With mCnnDB
        .Provider = "MSDAORA"
        .ConnectionString = "User ID='" & UserID & "';" & _
        "Password='" & UserPwd & "';" & _
        "Data Source='" & ServerName & "'"
        .Open()
        End With
        End Sub 

          連結數據庫后,就可以利用ADO擴充讀寫數據的函數。

          ADO在訪問表時要指明其光標類型和鎖類型,且指定其讀寫權限,這里我們編寫的是有讀寫權限的通用的函數,所以我們指定光標CursorType為adOpenKeyset,鎖為adLockOptimistic,.NET需指明其來源,這是為什么開始要有 "Imports ADODB.CursorLocationEnum"語句的原因。有了這些,就可通過執行查詢語句來打開一個表。打開表后,我們判斷表是否為空表,不是則移動記錄至尾后再現移至記錄頭(這是為了可以訪問其中每條記錄,特別是用RecordCount求記錄數時不至于返回-1的關鍵),最后返回一個記錄集,完整的代碼如下:


        '作用:連接表
        '參數:TableName表名
        '返回:記錄集
        Public Function OpenTable(ByVal TableName) As ADODB.Recordset
        Dim strSql As String
        Dim rec As ADODB.Recordset
        rec = New ADODB.Recordset()
        rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
        rec.LockType = ADODB.LockTypeEnum.adLockOptimistic
        strSql = "SELECT * FROM " & TableName
        rec.Open(strSql, mCnnDB) '打開記錄集
        If Not rec.EOF Then
        rec.MoveLast()
        rec.MoveFirst()
        End If
        OpenTable = rec
        End Function 

          下面是擴充上面函數的功能,可以跟據條件訪問單個表。


        Public Overloads Function OpenTable(ByVal TableName As String, ByVal strWhere As String) As ADODB.Recordset
        Dim strSql As String
        Dim rec As ADODB.Recordset
        rec = New ADODB.Recordset()
        rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
        rec.LockType = ADODB.LockTypeEnum.adLockOptimistic
        strSql = "SELECT * FROM " & TableName & " where " & strWhere
        rec.Open(strSql, mCnnDB) '打開記錄集
        If Not rec.EOF Then
        rec.MoveLast()
        rec.MoveFirst()
        End If
        Return rec
        End Function 

          繼續擴充訪問表的功能。有時要打開多個表,讀寫其中的數據,我們可以通過建立查詢視圖實現,其它類似上面的OpenTable,完整的代碼如下:


        '作用:連接多表
        '參數:strSQL
        '返回:記錄集
        Public Function ExecuteSQL(ByVal strSql As String) As ADODB.Recordset
        Dim rec As New ADODB.Recordset()
        rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
        rec.LockType = ADODB.LockTypeEnum.adLockOptimistic
        rec.Open(strSql, mCnnDB) '打開記錄集
        ExecuteSQL = rec
        End Function 

        下面編寫了一個用記錄集填充AxMSFlexGrid網格的過程。其中函數RecordCount是我自己編寫的求記錄集中記錄的函數。這里不能直接用ADO的RecordCount求得。如果記錄集是空,則退出過程。否則求出記錄集的記錄數和字段來確定AxMSFlexGrid網格的行列數據,然后讀出記錄集的數據直接填充到AxMSFlexGrid網格。要說明的是讀出記錄集的數據時要先判斷是否為空值,由函數IsDBNull實現(函數IsDBNull來源于System.DBNull).最后記錄集應該返回到記錄首位,否則影響了原有的記錄集,完整的代碼如下:


        '作用:用記錄集的數據填充網格
        '參數:MSGrid 網格對象,rec 記錄集對象
        Public Sub FillMsGrid(ByVal MSGrid As AxMSFlexGridLib.AxMSFlexGrid, ByVal rec As ADODB.Recordset)
        Dim i, j, RecordNum As Integer
        If rec.EOF Then Exit Sub
        RecordNum = RecordCount(rec)
        MSGrid.Rows = RecordNum + 1
        MSGrid.Cols = rec.Fields.Count + 1
        For i = 0 To RecordNum - 1
        For j = 0 To rec.Fields.Count - 1
        If IsDBNull(rec(j).Value) Then
        MSGrid.set_TextMatrix(i + 1, j + 1, "")
        Else
        MSGrid.set_TextMatrix(i + 1, j + 1, rec(j).Value)
        End If
        Next
        MSGrid.set_TextMatrix(i + 1, 0, i)
        rec.MoveNext()
        Next
        rec.MoveFrist()
        End Sub
        '作用:取記錄集的記錄數
        '參數:rec 記錄集對象
        '返回:記錄集的記錄數

        Public Function RecordCount(ByVal rec As ADODB.Recordset) As Integer
        Dim i As Integer
        If rec.EOF Then
        RecordCount = 0
        Exit Function
        End If
        With rec
        .MoveFirst()
        Do While Not .EOF
        i += 1
        .MoveNext()
        Loop
        .MoveFirst()
        End With
        RecordCount = i
        End Function


          以上代碼編好后放在所定義的類中.下面的省略號代表上面的函數和過程。可直接生成為DLL組件。方法是在.NET編輯環境下選擇生成菜單中按生成就生成了DLL文件。然后,你可以直接調用該組件了。


        Imports ADODB.Connection
        Imports ADODB.Recordset
        Imports ADODB.CursorLocationEnum
        Imports System.DBNull '函數IsDBNull的來源
        Class ADOAccess
        Private mCnnDB As New ADODB.Connection()

        End Class 

          調用上面生成的組件方法如下:在Visual Basic.NET中建立一項目,在窗口Form1中加入一AxMSFlexGrid網格命名為MsGrid1,布置如下

          然后引用剛建立的Dll。方法是選擇項目菜單的添加引用,選擇項目頁,按瀏覽找到其DLL文件確定后引用完成。在Form1中定義一ADOAccess對象,在Load事件中編寫調用代碼,分別測試其功能,代碼如下:


        Public Class Form1
        Inherits System.Windows.Forms.Form
        Dim DB As New ADOAccess()
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim rec As New ADODB.Recordset()
        'DB.ConnAccess("e:\test.mdb")
        'DB.ConnSQLServer("wj-1058", "test")
        'DB.ConnODBC("testODBC")
        'DB.ConnOracle("wj-1059", "system", "manager")
        'rec = DB.OpenTable("DEMO.customer")
        rec = DB.OpenTable("doc_file")
        DB.FillMsGrid(MSGrid1, rec)
        End Sub 

          說明:

          1.你的機上要有Access數據庫文件(e:\test.mdb),MS Server數據庫中有數據庫test,doc_file 為test中的表,Oracle數據庫中有表DEMO.customer

          2. wj-1058為MS Server服務器名,wj-1059為Oracle服務器名,"system", "manager"分別為用戶名及口令。

          3. 一次僅連接一種數據庫。

          以上程序在Visual Studio.NET中調試通過。 

          總結:上面方法介紹了剛面世不久的Visual Basic.NET中有關數據庫的開發,ADO在Visual Basic.NET中的應用,連接幾種最實用的數據庫,且介紹了編寫組件的方法。

        本欄文章均來自于互聯網,版權歸原作者和各發布網站所有,本站收集這些文章僅供學習參考之用。任何人都不能將這些文章用于商業或者其他目的。

        相關教程
        免费看成年人视频大全_免费看成年人视频在线观看