VisualBasic.NET是微软对VisualBasic语言进行的升级版本。它是一种完全面向对象的编程语言。微软对其进行了很大的改进。ADO在VisualBasic.NET中不再直接支持。访问数据有了新的变化,比以前复杂多了。签于大家比较熟悉ADO,且ADO的确简单、方便、适用。固本人利用ADO编写的访问目前市面上最广泛使用的数据库。现在接合VisualBasic.NET强大的类开发功能,本人把ADO访问数据的方法编成组件,完全封装起来,以方便大家的使用。方法如下:
启动VisualStudio.NET。在新建项目中选择VisualBasic项目,在模板中选择类库,在名称中输入类库名称如DataAccess.确定后,则进入类库开发环境中,把Class1换名为ADOAccess。
在项目菜单中加入引用,选择COM页,找到MicrosoftActionXDataObject20Library或更高版本确定。COM是Microsoft为了区分现在的.net,兼容以前的开发方式而设置的,凡是.net之前的组成件都可在COM页中可找到。(MicrosoftActionXDataObject20Library是Microsoft提供的ADO组件。它极大地方便了数据库的访问,是开发数据库有关软件的最实用的工具之一)
财管 家园 fs119.net
在类名上面写上ImportsADODB.ConnectionImportsADODB.Recordset,ImportsADODB.CursorLocationEnum,ImportsSystem.DBNull4条引用语句,这里分别是引用ADO,ADO的宏定义,空值函数的来源。
在类中定义一局部连接对象变量。PrivatemCnnDBAsNewADODB.Connection()
然后定义连接Access数据库的过程.Access数据库是Microsoft开发的本地数据库,用adUseClient指定。它通过Microsoft.Jet.OLEDB数据访问方式访问数据库,Microsoft.Jet.OLEDB又有多种版本,其中4.0是最高版本,它能访问ACCESS2000,所以这里的数据提供者指定为Microsoft.Jet.OLEDB.4.0。指定了本地数据库和提供者后,就可打开一个数据库了,用open方法实现。完整的代码如下:
财 软联盟 fs119.net
'参数:DBName数据库名
PublicSubConnAccess(ByValDBNameAsString)
DimstrDBAsString
mCnnDB.CursorLocation=adUseClient
mCnnDB.Provider="Microsoft.Jet.OLEDB.4.0"
mCnnDB.Open(DBName,"Admin")
EndSub
ODBC是一种广泛使用的连接多种数据库的方法,有万能钥匙之功效,但它需要通过ODBC先建立一个DNS,这里不作详细说明.有了DNS就可访问所连接的数据库。访问ODBC时先指明提供者,提供者只能为Microsoft命名的MSDASQL,然后通过连接字符串指定数据源,用户名和密码,在下面的ConnectionString中指定,最后用open打开。由于ODBC分有用户名和无用户名两者,我们必须分别实现,借助类的函数名重载功能,我们编写两个同名的过程,完整的代码如下:
财管家,园,fs119.net
'参数:dsnName为ODBC名
PublicSubConnODBC(ByValdsnNameAsString)
mCnnDB.Provider="MSDASQL"
mCnnDB.ConnectionString="DataSource='"&dsnName&"'"
mCnnDB.Open()
EndSub
'作用:连接ODBC数据库(需指定用户和密码)
'参数:dsnNameODBC名,UserID用户名,UserPwd用户密码
PublicSubConnODBC(ByValdsnNameAsString,ByValUserIDAsString,ByValUserPwdAsString)mCnnDB.Provider="MSDASQL"
mCnnDB.ConnectionString="DataSource='"&dsnName&"'UserID='"&UserID&"';"&_
"Password='"&UserPwd&"
mCnnDB.Open()
EndSub
财软 联盟 fs119.net
财.管家园.fs119.net
财软联盟 fs119.net
财软.联盟.fs119.net
财管家.园.fs119.net
'参数:ServerName服务器名,DBName数据库名
PublicSubConnSQLServer(ByValServerNameAsString,ByValDBNameAsString)
WithmCnnDB
.ConnectionString="uid=;pwd=;driver={SQLServer};"&_
"server="&ServerName&_
";database="&DBName
.Open()
EndWith
EndSub
'作用:连接SQLServer数据库
'参数:ServerName服务器名,DBName数据库名,UserID用户名,UserPwd用户密码
PublicSubConnSQLServer(ByValServerNameAsString,ByValDBNameAsString,ByValUserIDAsString,ByValUserPwdAsString)
WithmCnnDB
.ConnectionString="uid=’”&UserID&“’;pwd=’”&UserPwd&”’;driver={SQLServer};"&_
"server="&ServerName&_
";database="&DBName
.Open()
EndWith
EndSub
Oracle数据库是目前最有影响的一种广泛使用的后台数据库。访问Oracle先指明其提供者MSDAORA。Oracle与SqlServer不同的是它不是通过数据库来管理的,所以它不需指明数据库,但它连接时必须指明用户,即使是超级用户也如此,这是它的安全性能高于SqlServer的理现之一,所以我们只须编写一个过程。其它类似。完整的代码如下: 财 管家园 fs119.net
财软,联盟,fs119.net
'参数:ServerName服务器名,DBName数据库名,UserID用户名,UserPwd用户密码
PublicSubConnOracle(ByValServerNameAsString,ByValUserIDAsString,ByValUserPwdAsString)
WithmCnnDB
.Provider="MSDAORA"
.ConnectionString="UserID='"&UserID&"';"&_
"Password='"&UserPwd&"';"&_
"DataSource='"&ServerName&"'"
.Open()
EndWith
EndSub
有了上面的连接数据库的方法,我们就直接可读写数据了。下面利用ADO扩充读写数据的函数。
财软.联盟.fs119.net
财管家,园,fs119.net
财管家 园 fs119.net
财管 家园 fs119.net
财软联盟,fs119.net
ADO在访问表时要指明其光标类型和锁类型,且指定不同其权限就不同,权限分为读写二种,这里我们编写的是有读写权限的通用的函数,所以我们指定光标CursorType为adOpenKeyset,锁为开锁adLockOptimistic,.net需指明其来源,这是为什么开始要有“ImportsADODB.CursorLocationEnum”语句的原因。有了这些,就可通过执行查询语句来打开一个表。打开表后,我们判断表是否为空表,不是则移动记录至尾后再现移至记录头(这是为了可以访问其中每条记录,特别是用RecordCount求记录数时不至有时返回-1的关键),最后返回一个记录集,完整的代码如下:
财软联盟,fs119.net
'参数:TableName表名
'返回:记录集
PublicFunctionOpenTable(ByValTableName)AsADODB.Recordset
DimstrSqlAsString
DimrecAsADODB.Recordset
rec=NewADODB.Recordset()
rec.CursorType=ADODB.CursorTypeEnum.adOpenKeyset
rec.LockType=ADODB.LockTypeEnum.adLockOptimistic
strSql="SELECT*FROM"&TableName
rec.Open(strSql,mCnnDB)'打开记录集
IfNotrec.EOFThen
rec.MoveLast()
rec.MoveFirst()
EndIf
OpenTable=rec
EndFunction
下面是扩充上面函数的功能,可以跟据条件访问单个表。
财软,联盟,fs119.net
DimstrSqlAsString
DimrecAsADODB.Recordset
rec=NewADODB.Recordset()
rec.CursorType=ADODB.CursorTypeEnum.adOpenKeyset
rec.LockType=ADODB.LockTypeEnum.adLockOptimistic
strSql="SELECT*FROM"&TableName&"where"&strWhere
rec.Open(strSql,mCnnDB)'打开记录集
IfNotrec.EOFThen
rec.MoveLast()
rec.MoveFirst()
EndIf
Returnrec
EndFunction
财软,联盟,fs119.net
财.管家园.fs119.net
财管家园 fs119.net
财管家,园,fs119.net '作用:连接多表
'参数:strSQL
'返回:记录集
PublicFunctionExecuteSQL(ByValstrSqlAsString)AsADODB.Recordset
DimrecAsNewADODB.Recordset()
rec.CursorType=ADODB.CursorTypeEnum.adOpenKeyset
rec.LockType=ADODB.LockTypeEnum.adLockOptimistic
rec.Open(strSql,mCnnDB)'打开记录集
ExecuteSQL=rec
EndFunction
下面编写了一个用记录集填充AxMSFlexGrid网格的过程。其中函数RecordCount是我自己编写的求记录集中记录数据的函数。这里不能直接用ADO的RecordCount求得。如果记录集是空,则退出过程。否则求出记录集的记录数和字段数据用来确定AxMSFlexGrid网格的行列数据,然后读出记录集的数据直接填充到AxMSFlexGrid网格。要说明的是读出记录集的数据时要先判断是否为空值,由函数IsDBNull实现(函数IsDBNull来源于System.DBNull).最后记录集应该返回到记录首位,否则影响了原有的记录集,完整的代码如下:
财.软联盟.fs119.net
'作用:用记录集的数据填充网格
'参数:MSGrid网格对象,rec记录集对象
PublicSubFillMsGrid(ByValMSGridAsAxMSFlexGridLib.AxMSFlexGrid,ByValrecAsADODB.Recordset)
Dimi,j,RecordNumAsInteger
Ifrec.EOFThenExitSub
RecordNum=RecordCount(rec)
MSGrid.Rows=RecordNum1
MSGrid.Cols=rec.Fields.Count1
Fori=0ToRecordNum-1
Forj=0Torec.Fields.Count-1
IfIsDBNull(rec(j).value)Then
MSGrid.set_TextMatrix(i1,j1,"")
Else
MSGrid.set_TextMatrix(i1,j1,rec(j).value)
EndIf
Next
MSGrid.set_TextMatrix(i1,0,i)
rec.MoveNext()
Next
rec.MoveFrist()
EndSub
'作用:取记录集的记录数
'参数:rec记录集对象
'返回:记录集的记录数
PublicFunctionRecordCount(ByValrecAsADODB.Recordset)AsInteger
DimiAsInteger
Ifrec.EOFThen
RecordCount=0
ExitFunction
EndIf
Withrec
.MoveFirst()
DoWhileNot.EOF
i=1
.MoveNext()
Loop 财 软联盟 fs119.net
.MoveFirst()
EndWith
RecordCount=i
EndFunction
以上代码编好后放在所定义的类中.下面的省略号代表上面的函数和过程。可直接生成为DLL组件。方法是在.net编辑环境下选择生成菜单中按生成就生成了DLL文件。然后,你可以直接调用该组件了。 财软联 盟 fs119.net
财软联盟.fs119.net
财.软联盟.fs119.net
财管 家园 fs119.net
财.管家园.fs119.net ImportsADODB.Connection
ImportsADODB.Recordset
ImportsADODB.CursorLocationEnum
ImportsSystem.DBNull‘函数IsDBNull的来源
ClassADOAccess
PrivatemCnnDBAsNewADODB.Connection()
…
EndClass
调用上面生成的组件方法如下:在VisualBasic.NET中建立一项目,在窗口Form1中加入一AxMSFlexGrid网格命名为MsGrid1,然后引用刚建立的Dll。方法是选择项目菜单的添加引用,选择项目页,按浏览找到其DLL文件确定后引用完成。在Form1中定义一ADOAccess对象,在Load事件中编写调用代码,分别测试其功能,代码如下:
财软 联盟 fs119.net
财 管家园 fs119.net PublicClassForm1
InheritsSystem.Windows.Forms.Form
DimDBAsNewADOAccess()
PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
DimrecAsNewADODB.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)
EndSub
说明:
1.你的机上要有Access数据库文件(e:\test.mdb),MSServer数据库中有数据库test,doc_file为其test中的表,Oracle数据库中有表DEMO.customer。
2.wj-1058为MSServer服务器名,wj-1059为Oracle服务器名,"system","manager"分别为用户名及口令。
3.一次仅连接一种数据库。以上程序在VisualStudio.NET中调试通过。
总结:上面方法介绍了刚面世不久的VisualBasic.NET中有关数据库的开发,ADO在VisualBasic.NET中的应用,连接几种最实用的数据库,且介绍了编写组件的方法。利用该知识极大地方便了软件开发者访问数据的能力,提高了开发效率。
财管家园,fs119.net
财软联.盟.fs119.net
财软联盟.fs119.net
Google.cn搜索相关文章:
谷歌中搜索全球网 VisualBasic.NET中访问数据的方法
百度中搜索 VisualBasic.NET中访问数据的方法
谷歌中搜索www.fs119.net VisualBasic.NET中访问数据的方法
下一篇:VisualBasic.NET中动态加载类
精品课程推荐
- 在VisualBasic.NET中实现后台进程(三
- 在VisualBasic.NET中实现后台进程(二
- 在VisualBasic.NET中实现后台进程(一
- VB.NET开发互联网应用
- VisualBasic.NET中操作MsAgent
- VisualBasic.NET快速开发MIS系统
- VisualBasic.NET实现后台处理
- 运用VB.net创建Web服务访问程序
- 一步一步创建VisualBasic.NET控件
- 如何用VB.Net创建一个三层的数据库应
- VisualBasic.NET中动态加载类
- VisualBasic.NET中访问数据的方法
- 消息队列在VB.NET数据库开发中的应用
- VB.NET窗体操作技巧两则
- VB.NET中的多线程开发