net中以 ADO
NET取代以前的ADO
用慣ADO的程序員怎樣在
NET中怎樣應用ADO呢?本人經過不斷的摸索
發現在
NET中ADO一樣可以用
並且很好用
現在結合Visual Basic
NET強大的類開發功能
本人將ADO開發成組件使用
效果非常理想
我使用的方法如下
啟動Visual Studio
NET
在新建項目中選擇Visual Basic項目
在模板中選擇類庫
在名稱中輸入類庫名稱如DataAccess
確定後
則進入類庫開發環境中
把Class
換名為ADOAccess
在項目菜單中加入引用
選擇COM頁
找到 Microsoft ActionX Data Object
Library 或更高版本
COM選項是Microsoft為了區分現在的
NET
兼容以前的開發方式而設置的
凡是
NET之前的組件都可在COM頁中可找到
在類名上面寫上Imports ADODB
Connection
Imports ADODB
Recordset
Imports ADODB
CursorLocationEnum
Imports System
DBNull
條引用語句
這裡分別是引用ADO
ADO的宏定義
設置空值函數的來源
在類中定義一局部連接對象變量
Private mCnnDB As New ADODB
Connection()
然後定義連接Access數據庫的過程
Access 數據庫用adUseClient指定
通過Microsoft
Jet
OLEDB數據訪問方式訪問數據庫
Microsoft
Jet
OLEDB又有多種版本
其中
是最高版本
它能訪問ACCESS
所以這裡的數據提供者指定為Microsoft
Jet
OLEDB
指定了本地數據庫和提供者後
就可打開一個數據庫了
用open方法實現
完整的代碼如下
作用: 連接Access數據庫
參數: DBName 數據庫名
Public Sub ConnAccess(ByVal DBName As String)
Dim strDB As String
mCnnDB
CursorLocation = adUseClient
mCnnDB
Provider =
Microsoft
Jet
OLEDB
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先指明其提供者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鎖為a需指明其來源這是為什麼開始要有 Imports ADODBCursorLocationEnum語句的原因有了這些就可通過執行查詢語句來打開一個表打開表後我們判斷表是否為空表不是則移動記錄至尾後再現移至記錄頭(這是為了可以訪問其中每條記錄特別是用RecordCount求記錄數時不至於返回的關鍵)最後返回一個記錄集完整的代碼如下
作用:連接表
參數
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 +
MSGrid
Cols = rec
Fields
Count +
For i =
To RecordNum
For j =
To rec
Fields
Count
If IsDBNull(rec(j)
Value) Then
MSGrid
set_TextMatrix(i +
j +
)
Else
MSGrid
set_TextMatrix(i +
j +
rec(j)
Value)
End If
Next
MSGrid
set_TextMatrix(i +
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 =
Exit Function
End If
With rec
MoveFirst()
Do While Not
EOF
i +=
MoveNext()
Loop
MoveFirst()
End With
RecordCount = i
End Function
以上代碼編好後放在所定義的類中下面的省略號代表上面的函數和過程可直接生成為DLL組件方法是編輯環境下選擇生成菜單中按生成就生成了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 BasicNET中建立一項目在窗口Form中加入一AxMSFlexGrid網格命名為MsGrid布置如下
然後引用剛建立的Dll方法是選擇項目菜單的添加引用選擇項目頁按浏覽找到其DLL文件確定後引用完成在Form中定義一ADOAccess對象在Load事件中編寫調用代碼分別測試其功能代碼如下
Public Class Form
Inherits System
Windows
Forms
Form
Dim DB As New ADOAccess()
Private Sub Form
_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
test
)
DB
ConnODBC(
testODBC
)
DB
ConnOracle(
wj
system
manager
)
rec = DB
OpenTable(
DEMO
customer
)
rec = DB
OpenTable(
doc_file
)
DB
FillMsGrid(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/13437.html