.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中的應用,連接幾種最實用的數據庫,且介紹了編寫組件的方法。
-
vb.net教程之在Visual Basic.NET使用ADO訪問數據庫
- 2017-06-07 13:50 來源:未知
本欄文章均來自于互聯網,版權歸原作者和各發布網站所有,本站收集這些文章僅供學習參考之用。任何人都不能將這些文章用于商業或者其他目的。
最新更新
Python3基礎之Python中GIL
Python3基礎之GIL 是什么
Python3基礎之Python并發之GIL的限制(重點)
Python3基礎之Python的GIL是什么、怎么來的、
Python3基礎之詳解Python GIL
Python3基礎之python使用多線程
Python3基礎之關于python全局性解釋鎖(GI
Python3基礎之數據結構與算法(Python)
Python3基礎:String模塊ascii_letters和digits
python基礎教程之django之路由層
基于UDP的服務器端和客戶端
再談UDP和TCP
在socket編程中使用域名
網絡數據傳輸時的大小端問題
socket編程實現文件傳輸功能
如何優雅地斷開TCP連接?
圖解TCP四次握手斷開連接
詳細分析TCP數據的傳輸過程
圖解TCP數據報結構以及三次握手(非常詳
TCP協議的粘包問題(數據的無邊界性)
Mysql Workbench使用教程
MySQL教程之MySQL Workbench
sql語句大全之Microsoft SQL Server 2012安裝說明
sql語句大全之隨機姓名生成方法
sql語句大全之SQL干貨筆記
access數據庫之隨說秋色園從Access升遷到
access數據庫之微信公眾平臺開發(26) ACCE
access數據庫之ACCESS TOKEN
access數據庫之當爬蟲被拒絕時(Access Deni
access數據庫之當爬蟲被拒絕時(Access Deni