http://info.shangdu.com/new/2003-5-8/200358113624.htm
       Visual Basic.NET是微软对Visual Basic语言进行的升级版本。它是一种完全面向对象的编程语言。微软对其进行了很大的改进。ADO在Visual Basic.NET中不再直接支持。访问数据有了新的变化,比以前复杂多了。签于大家比较熟悉ADO,且ADO的确简单、方便、适用。固本人利用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页中可找到。(Microsoft ActionX Data Object 20 Library是Microsoft提供的ADO组件。它极大地方便了数据库的访问,是开发数据库有关软件的最实用的工具之一)

  在类名上面写上Imports ADODB.Connection Imports ADODB.Recordset ,Imports ADODB.CursorLocationEnum, Imports System.DBNull 4条引用语句,这里分别是引用ADO,ADO的宏定义,空值函数的来源。

  在类中定义一局部连接对象变量。 Private mCnnDB As New ADODB.Connection() 
然后定义连接Access数据库的过程. Access 数据库是Microsoft开发的本地数据库,用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是一种广泛使用的连接多种数据库的方法,有万能钥匙之功效,但它需要通过ODBC先建立一个DNS,这里不作详细说明.有了DNS就可访问所连接的数据库。访问ODBC时先指明提供者,提供者只能为Microsoft 命名的MSDASQL,然后通过连接字符串指定数据源,用户名和密码,在下面的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中的应用,连接几种最实用的数据库,且介绍了编写组件的方法。利用该知识极大地方便了软件开发者访问数据的能力,提高了开发效率。

转载于:https://www.cnblogs.com/penboy/archive/2005/03/22/123183.html

Visual Basic.NET中访问数据的方法(zz)相关推荐

  1. 在 Visual Basic .NET 中使用存储过程(转载)

    Billy Hollis  2002年9月14日 从 MSDN Code Center 下载 StoredProcVB.NET.exe 示例文件(英文). 我们作者通常将软件分为两类 - 真实软件和演 ...

  2. 在 Visual Basic .NET 中使用存储过程

    Billy Hollis 下载 StoredProcVB.NET.exe. 我们这些作者倾向于将软件分为两类: 实际软件 和 演示软件. 实际软件就是那些在现实中能够真正运作的软件. 演示软件则是为了 ...

  3. 在Visual Basic .NET中使用存储过程

    摘要:Billy Hollis 解释了在复杂系统中使用存储过程的好处,使存储过程超出了演示软件的范畴,并提供了有关如何访问存储过程并在您自己的应用程序中开始使用这些存储过程的实用示例. 我们作者通常将 ...

  4. Visual Basic 2005 中的程式語言加強功能

    Visual Basic 2005 中的程式語言加強功能 作者:Stan Schultes Microsoft MVP 2004 年 10 月 摘要:本文介紹許多 Visual Basic 2005 ...

  5. Oracle索引梳理系列(一)- Oracle访问数据的方法

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  6. android json mysql_Android通过json向MySQL中读写数据的方法详解【写入篇】

    本文实例讲述了Android通过json向MySQL中写入数据的方法.,具体如下: 先说一下如何通过json将Android程序中的数据上传到MySQL中: 首先定义一个类JSONParser.Jav ...

  7. [综述类] 一文道尽深度学习中的数据增强方法(上)

    今天带来一次有关于深度学习中的数据增强方法的分享. 00 什么是数据增强 在深度学习项目中,寻找数据花费了相当多的时间.但在很多实际的项目中,我们难以找到充足的数据来完成任务. 为了要保证完美地完成项 ...

  8. android json mysql_Android通过json向MySQL中读写数据的方法详解【读取篇】

    本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private vo ...

  9. python把数据写入excel_Python向excel中写入数据的方法

    Python向excel中写入数据的方法 最近做了一项工作需要把处理的数据写入到Excel表格中进行保存,所以在此就简单介绍使用Python如何把数据保存到excel表格中. 数据导入之前需要安装 x ...

最新文章

  1. Silverlight 3.0 Beta版 正式发布
  2. 表格元素的快捷获取以及隔行变色、鼠标移入变色案例
  3. python平均工资-2019年我国程序员薪资统计,看看你出于什么水平?
  4. 在网上常听到说CEO CTO CIO CGO COO CFO什么什么..现在了解了一下..呵呵
  5. JavaScript(二)——数据类型、流程控制、Map和Set
  6. 在语言中的运算符中,处于同一优先级别的运算符还分优先次序吗?
  7. maven原型_Maven原型创建技巧
  8. github和pypi_如何将GitHub用作PyPi服务器
  9. 初识Node.js之Node.js与java作为后台服务器的对比
  10. 侵犯著作权法定赔偿额上限提高至500万元
  11. Picasso遇到的坑
  12. 我的世界服务器怎么弄无限急迫,我的世界有什么指令设置无限急迫
  13. bzoj 1040: [ZJOI2008]骑士
  14. spring学习(五)—AOP相关术语
  15. ubuntu linux 1604 编译安装tesseract-ocr 4.0
  16. 学计算机如何防辐射,日常生活如何防辐射 学会这4招不用怕
  17. 瑜欣平瑞通过注册:年营收6.6亿 胡云平一家三口为实控人
  18. HDU 6438-Buy and Resell
  19. 【渝粤教育】电大中专Windows操作系统_1作业 题库
  20. 01 linux 下tcl源码编译安装和tcl手册使用

热门文章

  1. python元组和集合
  2. ONGC的完整形式是什么?
  3. Java BigDecimal longValueExact()方法与示例
  4. mysql 复制用户_MySQL修改复制用户及密码
  5. php7安装mysqli扩展_Ubuntu14版本下无法使用php7.2版本的bcmath扩展
  6. sql server linkserver oracle,SQL Server中使用Linkserver连接Oracle的方法
  7. node.js 获取异步方法里面的数据 =》 两种方式
  8. 排序(基本概念及分类,直接插入排序和希尔排序)
  9. 844. Backspace String Compare
  10. poll函数实现多路复用