熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

在Visual Basic.NET使用ADO訪問數據庫

2013-11-13 12:23:27  來源: .NET編程 
  NET中以 ADONET取代以前的ADO用慣ADO的程序員怎樣在NET中怎樣應用ADO呢?本人經過不斷的摸索發現在NET中ADO一樣可以用並且很好用現在結合Visual BasicNET強大的類開發功能本人將ADO開發成組件使用效果非常理想我使用的方法如下

  啟動Visual StudioNET在新建項目中選擇Visual Basic項目在模板中選擇類庫在名稱中輸入類庫名稱如DataAccess確定後則進入類庫開發環境中把Class換名為ADOAccess

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

  在類名上面寫上Imports ADODBConnection Imports ADODBRecordset Imports ADODBCursorLocationEnum Imports SystemDBNull 條引用語句這裡分別是引用ADOADO的宏定義設置空值函數的來源

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

作用: 連接Access數據庫
參數: DBName 數據庫名
Public Sub ConnAccess(ByVal DBName As String)
Dim strDB As String
mCnnDBCursorLocation = adUseClient
mCnnDBProvider = MicrosoftJetOLEDB
mCnnDBOpen(DBName Admin)
End Sub

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

作用: 連接ODBC數據庫(不需指定用戶和密碼 )
參數dsnName為ODBC名
Public Sub ConnODBC(ByVal dsnName As String)
mCnnDBProvider = MSDASQL
mCnnDBConnectionString = Data Source= & dsnName &
mCnnDBOpen()
End Sub

作用: 連接ODBC數據庫(需指定用戶和密碼 )
參數dsnName ODBC名UserID 用戶名UserPwd 用戶密碼
Public Sub ConnODBC(ByVal dsnName As String ByVal UserID As String ByVal UserPwd As String) mCnnDBProvider = MSDASQL
mCnnDBConnectionString = Data Source= & dsnName & User ID= & UserID & ; & _
Password= & UserPwd &
mCnnDBOpen()
End Sub


  SQL Server數據庫是Microsoft開發的一種廣泛使用的後台數據庫訪問SQL Server可以通過指明ODBC驅動程序為SQL Server來實現即在連接字符串中要有driver={SQL Server}由於它是後台數據庫所以必須指明SQL Server所在的計算機名通常把它稱為服務器下面的ServerName就說明這點然後指明是連接哪個數據庫其它的類似上面的ODBCSQL 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 StringByVal 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先指明其提供者MSDAORAOracle與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鎖為adLockOptimisticNET需指明其來源這是為什麼開始要有 Imports ADODBCursorLocationEnum語句的原因有了這些就可通過執行查詢語句來打開一個表打開表後我們判斷表是否為空表不是則移動記錄至尾後再現移至記錄頭(這是為了可以訪問其中每條記錄特別是用RecordCount求記錄數時不至於返回的關鍵)最後返回一個記錄集完整的代碼如下


作用:連接表
參數TableName表名
返回記錄集
Public Function OpenTable(ByVal TableName) As ADODBRecordset
Dim strSql As String
Dim rec As ADODBRecordset
rec = New ADODBRecordset()
recCursorType = ADODBCursorTypeEnumadOpenKeyset
recLockType = ADODBLockTypeEnumadLockOptimistic
strSql = SELECT * FROM & TableName
recOpen(strSql mCnnDB) 打開記錄集
If Not recEOF Then
recMoveLast()
recMoveFirst()
End If
OpenTable = rec
End Function

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


Public Overloads Function OpenTable(ByVal TableName As String ByVal strWhere As String) As ADODBRecordset
Dim strSql As String
Dim rec As ADODBRecordset
rec = New ADODBRecordset()
recCursorType = ADODBCursorTypeEnumadOpenKeyset
recLockType = ADODBLockTypeEnumadLockOptimistic
strSql = SELECT * FROM & TableName & where & strWhere
recOpen(strSql mCnnDB) 打開記錄集
If Not recEOF Then
recMoveLast()
recMoveFirst()
End If
Return rec
End Function

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


作用:連接多表
參數strSQL
返回記錄集
Public Function ExecuteSQL(ByVal strSql As String) As ADODBRecordset
Dim rec As New ADODBRecordset()
recCursorType = ADODBCursorTypeEnumadOpenKeyset
recLockType = ADODBLockTypeEnumadLockOptimistic
recOpen(strSql mCnnDB) 打開記錄集
ExecuteSQL = rec
End Function

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


作用用記錄集的數據填充網格
參數MSGrid 網格對象rec 記錄集對象
Public Sub FillMsGrid(ByVal MSGrid As AxMSFlexGridLibAxMSFlexGrid ByVal rec As ADODBRecordset)
Dim i j RecordNum As Integer
If recEOF Then Exit Sub
RecordNum = RecordCount(rec)
MSGridRows = RecordNum +
MSGridCols = recFieldsCount +
For i = To RecordNum
For j = To recFieldsCount
If IsDBNull(rec(j)Value) Then
MSGridset_TextMatrix(i + j + )
Else
MSGridset_TextMatrix(i + j + rec(j)Value)
End If
Next
MSGridset_TextMatrix(i + i)
recMoveNext()
Next
recMoveFrist()
End Sub
作用取記錄集的記錄數
參數rec 記錄集對象
返回記錄集的記錄數

Public Function RecordCount(ByVal rec As ADODBRecordset) As Integer
Dim i As Integer
If recEOF Then
RecordCount =
Exit Function
End If
With rec
MoveFirst()
Do While Not EOF
i +=
MoveNext()
Loop
MoveFirst()
End With
RecordCount = i
End Function


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


Imports ADODBConnection
Imports ADODBRecordset
Imports ADODBCursorLocationEnum
Imports SystemDBNull 函數IsDBNull的來源
Class ADOAccess
Private mCnnDB As New ADODBConnection()

End Class

  調用上面生成的組件方法如下在Visual BasicNET中建立一項目在窗口Form中加入一AxMSFlexGrid網格命名為MsGrid布置如下

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


Public Class Form
Inherits SystemWindowsFormsForm
Dim DB As New ADOAccess()
Private Sub Form_Load(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles MyBaseLoad
Dim rec As New ADODBRecordset()
DBConnAccess(e:\testmdb)
DBConnSQLServer(wj test)
DBConnODBC(testODBC)
DBConnOracle(wj system manager)
rec = DBOpenTable(DEMOcustomer)
rec = DBOpenTable(doc_file)
DBFillMsGrid(MSGrid rec)
End Sub

  說明

  你的機上要有Access數據庫文件(e:\testmdb)MS Server數據庫中有數據庫testdoc_file 為test中的表Oracle數據庫中有表DEMOcustomer

   wj為MS Server服務器名wj為Oracle服務器名system manager分別為用戶名及口令

   一次僅連接一種數據庫

  以上程序在Visual StudioNET中調試通過 

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


From:http://tw.wingwit.com/Article/program/net/201311/15806.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.