NET中以 ADO
NET取代以前的ADO
用惯ADO的程序员怎样在
NET中怎样应用ADO呢?本人经过不断的摸索
发现在
NET中ADO一样可以用
并且很好用
现在结合Visual Basic
NET强大的类开发功能
本人将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中的应用连接几种最实用的数据库且介绍了编写组件的方法