您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3836|回复: 2

VB.NET使用ADO访问数据库[转载]

[复制链接]

49

主题

0

听众

59

积分

初级程序员

Rank: 5

性别
保密
听众数
0
买家信用
卖家信用
在线时间
0 小时
相册
0

社区元老勋章 无私奉献勋章

发表于 2006-6-20 16:40:00 |显示全部楼层
程序员装备

.NET中以 ADO.NET取代以前的ADO。用惯ADO的程序员怎样在.NET中怎样应用ADO呢?本人经过不断的摸索,发现在.NET中ADO一样可以用,并且很好用。现在结合Visual Basic.NET强大的类开发功能,本人将ADO开发成组件使用,效果非常理想。我使用的方法如下:<br><br>  启动Visual Studio.NET。在新建项目中选择Visual Basic项目,在模板中选择类库,在名称中输入类库名称如DataAccess.确定后,则进入类库开发环境中,把Class1换名为ADOAccess。<br><br>  在项目菜单中加入引用,选择COM页,找到 Microsoft ActionX Data Object 20 Library 或更高版本。COM选项是Microsoft为了区分现在的.NET,兼容以前的开发方式而设置的,凡是.NET之前的组件都可在COM页中可找到。<br><br>  在类名上面写上Imports ADODB.Connection; Imports ADODB.Recordset ;Imports ADODB.CursorLocationEnum; Imports System.DBNull 4条引用语句,这里分别是引用ADO,ADO的宏定义,设置空值函数的来源。<br><br>  在类中定义一局部连接对象变量。 Private mCnnDB As New ADODB.Connection()<br>然后定义连接Access数据库的过程. Access 数据库用adUseClient指定,通过Microsoft.Jet.OLEDB数据访问方式访问数据库,Microsoft.Jet.OLEDB又有多种版本,其中4.0是最高版本,它能访问ACCESS 2000,所以这里的数据提供者指定为Microsoft.Jet.OLEDB.4.0。指定了本地数据库和提供者后,就可打开一个数据库了,用open方法实现。完整的代码如下:<br><br>&#39;作用: 连接Access数据库<br>&#39;参数: DBName 数据库名<br>Public Sub ConnAccess(ByVal DBName As String)<br>Dim strDB As String<br>mCnnDB.CursorLocation = adUseClient<br>mCnnDB.Provider = &quot;Microsoft.Jet.OLEDB.4.0&quot;<br>mCnnDB.Open(DBName, &quot;Admin&quot;)<br>End Sub <br><br>  在ODBC中设置DNS,在下面的ConnectionString中指定用户名和密码,最后用open方法打开。由于ODBC分有用户名和无用户名两者,我们必须分别实现,借助类的函数名重载功能,我们编写两个同名的过程,完整的代码如下:<br><br>&#39;作用: 连接ODBC数据库(不需指定用户和密码 )<br>&#39;参数:dsnName为ODBC名<br>Public Sub ConnODBC(ByVal dsnName As String)<br>mCnnDB.Provider = &quot;MSDAsql&quot;<br>mCnnDB.ConnectionString = &quot;Data Source=&#39;&quot; &amp; dsnName &amp; &quot;&#39;&quot;<br>mCnnDB.Open()<br>End Sub<br><br>&#39;作用: 连接ODBC数据库(需指定用户和密码 )<br>&#39;参数:dsnName ODBC名,UserID 用户名,UserPwd 用户密码<br>Public Sub ConnODBC(ByVal dsnName As String, ByVal UserID As String, ByVal UserPwd As String) mCnnDB.Provider = &quot;MSDASQL&quot;<br>mCnnDB.ConnectionString = &quot;Data Source=&#39;&quot; &amp; dsnName &amp; &quot;&#39;User ID=&#39;&quot; &amp; UserID &amp; &quot;&#39;;&quot; &amp; _<br>&quot;Password=&#39;&quot; &amp; UserPwd &amp; &quot;<br>mCnnDB.Open()<br>End Sub <br><br><br>SQL Server数据库是Microsoft开发的一种广泛使用的后台数据库。访问SQL Server可以通过指明ODBC驱动程序为SQL Server来实现,即在连接字符串中要有driver={SQL Server},由于它是后台数据库,所以必须指明SQL Server所在的计算机名,通常把它称为服务器,下面的ServerName就说明这点,然后指明是连接哪个数据库。其它的类似上面的ODBC。SQL Server的用户分为WIN NT 和授权用户,WIN NT用户是不需要指定用户名和密码的超级用户,否则要指明用户名和密码,这决定于SQL Server数据库管理员,在此不作详细说明,完整的代码如下:<br><br><br>&#39;作用: 连接SQL Server数据库<br>&#39;参数:ServerName 服务器名,DBName 数据库名<br>Public Sub ConnSQLServer(ByVal ServerName As String, ByVal DBName As String)<br>With mCnnDB<br>.ConnectionString = &quot;uid=;pwd= ;driver={SQL Server};&quot; &amp; _<br>&quot;server=&quot; &amp; ServerName &amp; _<br>&quot;;database=&quot; &amp; DBName<br>.Open()<br>End With<br>End Sub<br>&#39;作用: 连接SQL Server数据库<br>&#39;参数:ServerName 服务器名,DBName 数据库名,UserID 用户名,UserPwd 用户密码<br>Public Sub ConnSQLServer(ByVal ServerName As String, ByVal DBName As String,ByVal UserID As String, ByVal UserPwd As String)<br>With mCnnDB<br>.ConnectionString = &quot;uid=&#39;&quot; &amp; UserID &amp; &quot;&#39;;pwd=&#39;&quot; &amp; UserPwd &amp;&quot;&#39;;driver={SQL Server};&quot; &amp; _<br>&quot;server=&quot; &amp; ServerName &amp; _<br>&quot;;database=&quot; &amp; DBName<br>.Open()<br>End With<br>End Sub<br><br><br>  Oracle数据库是目前最有影响的一种广泛使用的后台数据库。访问Oracle先指明其提供者MSDAORA。Oracle与Sql Server不同的是它不是通过数据库来管理的,所以它不需指明数据库,但它连接时必须指明用户,即使是超级用户也如此,这是它的安全性能高于Sql Server的理现之一,所以我们只须编写一个过程。其它类似。完整的代码如下:<br><br><br>&#39;作用: 连接Oracle数据库<br>&#39;参数:ServerName 服务器名,DBName 数据库名,UserID 用户名,UserPwd 用户密码<br>Public Sub ConnOracle(ByVal ServerName As String, ByVal UserID As String, ByVal UserPwd As String)<br>With mCnnDB<br>.Provider = &quot;MSDAORA&quot;<br>.ConnectionString = &quot;User ID=&#39;&quot; &amp; UserID &amp; &quot;&#39;;&quot; &amp; _<br>&quot;Password=&#39;&quot; &amp; UserPwd &amp; &quot;&#39;;&quot; &amp; _<br>&quot;Data Source=&#39;&quot; &amp; ServerName &amp; &quot;&#39;&quot;<br>.Open()<br>End With<br>End Sub <br><br>  连结数据库后,就可以利用ADO扩充读写数据的函数。<br><br>  ADO在访问表时要指明其光标类型和锁类型,且指定其读写权限,这里我们编写的是有读写权限的通用的函数,所以我们指定光标CursorType为adOpenKeyset,锁为adLockOptimistic,.NET需指明其来源,这是为什么开始要有 &quot;Imports ADODB.CursorLocationEnum&quot;语句的原因。有了这些,就可通过执行查询语句来打开一个表。打开表后,我们判断表是否为空表,不是则移动记录至尾后再现移至记录头(这是为了可以访问其中每条记录,特别是用RecordCount求记录数时不至于返回-1的关键),最后返回一个记录集,完整的代码如下:<br><br><br>&#39;作用:连接表<br>&#39;参数:TableName表名<br>&#39;返回:记录集<br>Public Function OpenTable(ByVal TableName) As ADODB.Recordset<br>Dim strSql As String<br>Dim rec As ADODB.Recordset<br>rec = New ADODB.Recordset()<br>rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset<br>rec.LockType = ADODB.LockTypeEnum.adLockOptimistic<br>strSql = &quot;SELECT * FROM &quot; &amp; TableName<br>rec.Open(strSql, mCnnDB) &#39;打开记录集<br>If Not rec.EOF Then<br>rec.MoveLast()<br>rec.MoveFirst()<br>End If<br>OpenTable = rec<br>End Function <br><br>  下面是扩充上面函数的功能,可以跟据条件访问单个表。<br><br><br>Public Overloads Function OpenTable(ByVal TableName As String, ByVal strWhere As String) As ADODB.Recordset<br>Dim strSql As String<br>Dim rec As ADODB.Recordset<br>rec = New ADODB.Recordset()<br>rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset<br>rec.LockType = ADODB.LockTypeEnum.adLockOptimistic<br>strSql = &quot;SELECT * FROM &quot; &amp; TableName &amp; &quot; where &quot; &amp; strWhere<br>rec.Open(strSql, mCnnDB) &#39;打开记录集<br>If Not rec.EOF Then<br>rec.MoveLast()<br>rec.MoveFirst()<br>End If<br>Return rec<br>End Function <br><br>  继续扩充访问表的功能。有时要打开多个表,读写其中的数据,我们可以通过建立查询视图实现,其它类似上面的OpenTable,完整的代码如下:<br><br><br>&#39;作用:连接多表<br>&#39;参数:strSQL<br>&#39;返回:记录集<br>Public Function ExecuteSQL(ByVal strSql As String) As ADODB.Recordset<br>Dim rec As New ADODB.Recordset()<br>rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset<br>rec.LockType = ADODB.LockTypeEnum.adLockOptimistic<br>rec.Open(strSql, mCnnDB) &#39;打开记录集<br>ExecuteSQL = rec<br>End Function <br><br>下面编写了一个用记录集填充AxMSFlexGrid网格的过程。其中函数RecordCount是我自己编写的求记录集中记录的函数。这里不能直接用ADO的RecordCount求得。如果记录集是空,则退出过程。否则求出记录集的记录数和字段来确定AxMSFlexGrid网格的行列数据,然后读出记录集的数据直接填充到AxMSFlexGrid网格。要说明的是读出记录集的数据时要先判断是否为空值,由函数IsDBNull实现(函数IsDBNull来源于System.DBNull).最后记录集应该返回到记录首位,否则影响了原有的记录集,完整的代码如下:<br><br><br>&#39;作用:用记录集的数据填充网格<br>&#39;参数:MSGrid 网格对象,rec 记录集对象<br>Public Sub FillMsGrid(ByVal MSGrid As AxMSFlexGridLib.AxMSFlexGrid, ByVal rec As ADODB.Recordset)<br>Dim i, j, RecordNum As Integer<br>If rec.EOF Then Exit Sub<br>RecordNum = RecordCount(rec)<br>MSGrid.Rows = RecordNum + 1<br>MSGrid.Cols = rec.Fields.Count + 1<br>For i = 0 To RecordNum - 1<br>For j = 0 To rec.Fields.Count - 1<br>If IsDBNull(rec(j).Value) Then<br>MSGrid.set_TextMatrix(i + 1, j + 1, &quot;&quot;)<br>Else<br>MSGrid.set_

0

主题

0

听众

3

积分

应届毕业生

Rank: 1

性别
保密
听众数
0
买家信用
卖家信用
在线时间
0 小时
相册
0
发表于 2007-1-16 21:53:00 |显示全部楼层

回复

学习了,LZ上面的例子是在VB。NET2003里验证的吧。希望能提供一些关于VB2005中数据库的例子。
回复

使用道具 举报

0

主题

0

听众

3

积分

应届毕业生

Rank: 1

性别
保密
听众数
0
买家信用
卖家信用
在线时间
0 小时
相册
0
发表于 2007-1-16 21:54:00 |显示全部楼层

回复

该程序是基于控制台的一个模拟数据库的连接<br>Option Explicit On<br>Option Strict On<br><br>Imports System<br>Imports System.Data<br>Imports System.Data.OleDb<br>Module Module1<br><br>Public Sub Main()<br><br>Dim connectionString As String = GetConnectionString() <br>Dim queryString As String = _ <br>&quot;SELECT CategoryID, CategoryName FROM Categories;&quot;<br>&#39;可以使用 Using 块保证系统在代码退出该块时释放资源。 <br>Using connection As New OleDb.OleDbConnection(connectionString) <br>Dim command As OleDbCommand = connection.CreateCommand()<br>command.CommandText = queryString <br>Try <br>connection.Open() <br>Dim dataReader As OleDbDataReader = command.ExecuteReader() <br>Do While dataReader.Read() <br>Console.WriteLine(vbTab &amp; &quot;{0}&quot; &amp; vbTab &amp; &quot;{1}&quot;, _ <br>dataReader(0), dataReader(1)) <br>Loop <br>dataReader.Close() <br>Catch ex As Exception <br>Console.WriteLine(ex.Message) <br>End Try <br>End Using <br>Console.Read() <br>End Sub<br>Private Function GetConnectionString() As String <br>&#39; To avoid storing the connection string in your code, <br>&#39; you can retrieve it from a configuration file. <br>&#39; Assumes Northwind.mdb is located in c:&#92;Data folder. <br>Return &quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot; _ &amp; &quot;E:&#92;DATABASE&#92;Nwind.mdb;&quot; <br>End Function<br>End Module<br>以上代码通过VB2005验证,其中的数据库是NORTHWIND数据库
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册


关闭

站长推荐上一条 /1 下一条



      
    Archiver|手机版|臣迅电子商务|网站地图|渝ICP备11003388号

GMT+8, 2012-5-20 08:56

© 2001-2011 Powered by Discuz! X2.5. Theme By Yeei! update By CNNTEC

webSite begin 2005

回顶部