VisualStudio中使用ADO访问数据库的实例.docx
《VisualStudio中使用ADO访问数据库的实例.docx》由会员分享,可在线阅读,更多相关《VisualStudio中使用ADO访问数据库的实例.docx(12页珍藏版)》请在冰点文库上搜索。
![VisualStudio中使用ADO访问数据库的实例.docx](https://file1.bingdoc.com/fileroot1/2023-6/27/a01f475e-0971-41f3-9c12-86b10c5ae179/a01f475e-0971-41f3-9c12-86b10c5ae1791.gif)
VisualStudio中使用ADO访问数据库的实例
VisualStudio2017
使用ADO访问数据库的实例
VisualStudio2017version以VisualStudio2015和后续的MicrosoftVisualStudio更新中的进展为基础构建而成,为开发团队提供需要的解决方案,使其接纳这种转变并开发和交付利用下一波Windows平台创新(Windows10)的新式应用程序,同时在所有Microsoft平台上支持多种设备和服务。
下载地址:
Studio2017新增功能
支持Windows10App开发
敏捷项目管理(AgilePortfolioManagement)
版本控制
轻量代码注释(lightweightcodecommenting)
编程过程
VisualStudio2017预览版提供的工具集非常适合生成利用下一波Windows平台创新(Windows10)的新式应用程序,同时在所有Microsoft平台上支持设备和服务。
支持在Windows10中开发Windows应用商店应用程序,具体表现在对工具、控件和模板进行了许多更新、对于XAML应用程序支持新近提出的编码UI测试、用于XAML和HTML应用程序的UI响应能力分析器和能耗探查器、增强了用于HTML应用程序的内存探查工具以及改进了与Windows应用商店的集成。
VisualStudio2017预览版进行了大量改进,可帮助您在编码时提高工作效率并集中精力。
某些功能首先在VisualStudioPowerTools扩展中以试验性质出现,经过改进后才纳入到VisualStudio中。
新版本中内置了多种提高工作效率的功能,如自动补全方括号、使用快捷键移动整行或整块的代码以及行内导航。
此外,VisualStudio2017预览版的团队资源管理器增强了主页设计,可以更简便地导航到团队协作功能,并可取消停靠“挂起更改”和“生成”,使其显示在一个单独的窗口中。
在处理大型代码文件时,可能难以了解当前所处的位置。
在VisualStudio2017预览版中,可轻松地在两种模式之间切换滚动条的行为。
在栏模式中,可更直接地查看脱字号位置等注释、更改所在位置和跟踪错误。
在图模式下,滚动条显示源代码的实时预览,而将鼠标悬停在代码上即可在工具提示中更详细地预览这段代码。
然后单击代码所在位置即可导航到该位置。
2017中以ADO2017取代以前的ADO。
用惯ADO的程序员怎样在2017中怎样应用ADO呢?
本人经过不断的摸索,发现在2017中ADO一样可以用,并且很好用。
现在结合VisualBasic2017强大的类开发功能,本人将ADO开发成组件使用,效果非常理想。
我使用的方法如下:
启动VisualStudio2017。
在新建项目中选择VisualBasic项目,在模板中选择类库,在名称中输入类库名称如DataAccess.确定后,则进入类库开发环境中,把Class1换名为ADOAccess。
在项目菜单中加入引用,选择COM页,找到MicrosoftActionXDataObject20Library或更高版本。
COM选项是Microsoft为了区分现在的2017,兼容以前的开发方式而设置的,凡是2017之前的组件都可在COM页中可找到。
在类名上面写上Imports;Imports;Imports;Imports4条引用语句,这里分别是引用ADO,ADO的宏定义,设置空值函数的来源。
在类中定义一局部连接对象变量。
PrivatemCnnDBAsNew()
然后定义连接Access数据库的过程.Access数据库用adUseClient指定,通过数据访问方式访问数据库,又有多种版本,其中是最高版本,它能访问ACCESS2000,所以这里的数据提供者指定为。
指定了本地数据库和提供者后,就可打开一个数据库了,用open方法实现。
完整的代码如下:
''作用:
连接Access数据库
''参数:
DBName数据库名
PublicSubConnAccess(ByValDBNameAsString)
DimstrDBAsString
=adUseClient
=""
(DBName,"Admin")
EndSub
在ODBC中设置DNS,在下面的ConnectionString中指定用户名和密码,最后用open方法打开。
由于ODBC分有用户名和无用户名两者,我们必须分别实现,借助类的函数名重载功能,我们编写两个同名的过程,完整的代码如下:
''作用:
连接ODBC数据库(不需指定用户和密码)
''参数:
dsnName为ODBC名
PublicSubConnODBC(ByValdsnNameAsString)
="MSDASQL"
="DataSource=''"&dsnName&"''"
()
EndSub
''作用:
连接ODBC数据库(需指定用户和密码)
''参数:
dsnNameODBC名,UserID用户名,UserPwd用户密码
PublicSubConnODBC(ByValdsnNameAsString,ByValUserIDAsString,ByValUserPwdAsString)="MSDASQL"
="DataSource=''"&dsnName&"''UserID=''"&UserID&"'';"&_
"Password=''"&UserPwd&"
()
EndSub
SQLServer数据库是Microsoft开发的一种广泛使用的后台数据库。
访问SQLServer可以通过指明ODBC驱动程序为SQLServer来实现,即在连接字符串中要有driver={SQLServer},由于它是后台数据库,所以必须指明SQLServer所在的计算机名,通常把它称为服务器,下面的ServerName就说明这点,然后指明是连接哪个数据库。
其它的类似上面的ODBC。
SQLServer的用户分为WINNT和授权用户,WINNT用户是不需要指定用户名和密码的超级用户,否则要指明用户名和密码,这决定于SQLServer数据库管理员,在此不作详细说明,完整的代码如下:
''作用:
连接SQLServer数据库
''参数:
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的理现之一,所以我们只须编写一个过程。
其它类似。
完整的代码如下:
''作用:
连接Oracle数据库
''参数:
ServerName服务器名,DBName数据库名,UserID用户名,UserPwd用户密码
PublicSubConnOracle(ByValServerNameAsString,ByValUserIDAsString,ByValUserPwdAsString)
WithmCnnDB
.Provider="MSDAORA"
.ConnectionString="UserID=''"&UserID&"'';"&_
"Password=''"&UserPwd&"'';"&_
"DataSource=''"&ServerName&"''"
.Open()
EndWith
EndSub
连结数据库后,就可以利用ADO扩充读写数据的函数。
ADO在访问表时要指明其光标类型和锁类型,且指定其读写权限,这里我们编写的是有读写权限的通用的函数,所以我们指定光标CursorType为adOpenKeyset,锁为adLockOptimistic,2017需指明其来源,这是为什么开始要有"Imports"语句的原因。
有了这些,就可通过执行查询语句来打开一个表。
打开表后,我们判断表是否为空表,不是则移动记录至尾后再现移至记录头(这是为了可以访问其中每条记录,特别是用RecordCount求记录数时不至于返回-1的关键),最后返回一个记录集,完整的代码如下:
''作用:
连接表
''参数:
TableName表名
''返回:
记录集
PublicFunctionOpenTable(ByValTableName)As
DimstrSqlAsString
DimrecAs
rec=New()
==="SELECT*FROM"&TableName
(strSql,mCnnDB)''打开记录集
IfNotThen
()
()
EndIf
OpenTable=rec
EndFunction
下面是扩充上面函数的功能,可以跟据条件访问单个表。
PublicOverloadsFunctionOpenTable(ByValTableNameAsString,ByValstrWhereAsString)As
DimstrSqlAsString
DimrecAs
rec=New()
==="SELECT*FROM"&TableName&"where"&strWhere
(strSql,mCnnDB)''打开记录集
IfNotThen
()
()
EndIf
Returnrec
EndFunction
继续扩充访问表的功能。
有时要打开多个表,读写其中的数据,我们可以通过建立查询视图实现,其它类似上面的OpenTable,完整的代码如下:
''作用:
连接多表
''参数:
strSQL
''返回:
记录集
PublicFunctionExecuteSQL(ByValstrSqlAsString)As
DimrecAsNew()
==mCnnDB)''打开记录集
ExecuteSQL=rec
EndFunction
下面编写了一个用记录集填充AxMSFlexGrid网格的过程。
其中函数RecordCount是我自己编写的求记录集中记录的函数。
这里不能直接用ADO的RecordCount求得。
如果记录集是空,则退出过程。
否则求出记录集的记录数和字段来确定AxMSFlexGrid网格的行列数据,然后读出记录集的数据直接填充到AxMSFlexGrid网格。
要说明的是读出记录集的数据时要先判断是否为空值,由函数IsDBNull实现(函数IsDBNull来源于.最后记录集应该返回到记录首位,否则影响了原有的记录集,完整的代码如下:
''作用:
用记录集的数据填充网格
''参数:
MSGrid网格对象,rec记录集对象
PublicSubFillMsGrid(ByValMSGridAs,ByValrecAs
Dimi,j,RecordNumAsInteger
IfThenExitSub
RecordNum=RecordCount(rec)
=RecordNum+1
=+1
Fori=0ToRecordNum-1
Forj=0To-1
IfIsDBNull(rec(j).Value)Then
(i+1,j+1,"")
Else
(i+1,j+1,rec(j).Value)
EndIf
Next
(i+1,0,i)
()
Next
()
EndSub
''作用:
取记录集的记录数
''参数:
rec记录集对象
''返回:
记录集的记录数
PublicFunctionRecordCount(ByValrecAsAsInteger
DimiAsInteger
IfThen
RecordCount=0
ExitFunction
EndIf
Withrec
.MoveFirst()
DoWhileNot.EOF
i+=1
.MoveNext()
Loop
.MoveFirst()
EndWith
RecordCount=i
EndFunction
以上代码编好后放在所定义的类中.下面的省略号代表上面的函数和过程。
可直接生成为DLL组件。
方法是在2017编辑环境下选择生成菜单中按生成就生成了DLL文件。
然后,你可以直接调用该组件了。
Imports
Imports
Imports
Imports''函数IsDBNull的来源
ClassADOAccess
PrivatemCnnDBAsNew()
…
EndClass
调用上面生成的组件方法如下:
在VisualBasic2017中建立一项目,在窗口Form1中加入一AxMSFlexGrid网格命名为MsGrid1,布置如下
然后引用刚建立的Dll。
方法是选择项目菜单的添加引用,选择项目页,按浏览找到其DLL文件确定后引用完成。
在Form1中定义一ADOAccess对象,在Load事件中编写调用代码,分别测试其功能,代码如下:
PublicClassForm1
InheritsDBAsNewADOAccess()
PrivateSubForm1_Load(ByValsenderAs,ByValeAsHandles
DimrecAsNew()
''("e:
\")
''("wj-1058","test")
''("testODBC")
''("wj-1059","system","manager")
''rec=("")
rec=("doc_file")
(MSGrid1,rec)
EndSub
说明:
1.你的机上要有Access数据库文件(e:
\),MSServer数据库中有数据库test,doc_file为test中的表,Oracle数据库中有表
2.wj-1058为MSServer服务器名,wj-1059为Oracle服务器名,"system","manager"分别为用户名及口令。
3.一次仅连接一种数据库。
以上程序在VisualStudio2017中调试通过。
总结:
上面方法介绍了刚面世不久的VisualBasic2017中有关数据库的开发,ADO在VisualBasic2017中的应用,连接几种最实用的数据库,且介绍了编写组件的方法。
本讲结束。