11 数据库连接模型_第1页
11 数据库连接模型_第2页
11 数据库连接模型_第3页
11 数据库连接模型_第4页
11 数据库连接模型_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

工程应用培训教材PAGEPAGE1MSSQL2000程序员培训教程四面楚歌系列培训教材VisualBasic6.0程序员培训教程第十一节数据库连接模型应用背景数据库管理是最为广泛的应用之一,数据库应用程序设计是自动化系统中的一大领域,特别是伴随客户机/服务器数据库管理系统的出现,这种类型的应用越来越受到广大用户喜爱。客户机是在工作站上运行的客户程序,工作站则与局域网络(LAN)或广域网络(WAN)上的服务器相连,构成客户机/服务器系统,其最主要的特点是所有由客户机应用程序发出的SQL语句都在服务器上执行,即服务器负责执行所有由工作站送入服务器的SQL语句。例如从工作站上向服务器发出一个

Select

查询,则只有满足查询条件的记录被返回到客户工作站。参见图11-1所示客户机/服务器结构,这种结构称C/S结构。数据库服务器LAN/WAN数据库服务器LAN/WAN图11-1客户机/服务器结构如果客户端使用浏览器Browser,而不是使用编写的客户端程序,那么由服务器端的目录服务器提供页面服务的程序设计,称为浏览器/服务器模式,即B/S模式。这种模式的显著特点是客户端没有程序,客户端只有浏览器,所有程序都在服务器端运行,显然他避免了客户端程序的安装,减少了客户端程序的维护,增强了客户端服务程序的核心作用。数据库连接模型就是适合以上所述两种软件开发模式的通用数据库联接模型,这里我们只介绍微软公司提供的ADO模型。知识要点(1)ADO模型ActiveXDataObjects简称ADO,ADO是Microsoft提出的应用程序接口(API)用以实现访问关系数据库中的数据,也是Microsoft的组件对象模式(COM)的一部分,是微软最新的数据访问技术。它被设计用来同新的数据访问层OLEDBProvider一起协同工作,以提供通用数据访问(UniversalDataAccess)。OLEDB是一个低层的数据访问接口,用它可以访问各种数据源,包括传统的关系型数据库,以及电子邮件系统及自定义的商业对象。ADO向我们提供了一个熟悉的,高层的对OLEDB的Automation封装接口。ADO对象是OLEDB的接口,不同的数据源要求它们自己的OLEDB提供者(OLEDBprovider)。目前,虽然OLEDB提供者比较少,但微软正积极推广该技术,并打算用OLEDB取代ODBC。ADO的目标是访问、编辑和更新数据源,而编程模型体现了为完成该目标所必需的系列动作的顺序。ADO可以完成的主要工作:1.连接到数据源。2.执行SQL命令。3.返回结果集。4.事物处理。5.执行存储过程。(2)VisualBasic6.0下建立数据库连接环境VB程序大多情况下是使用ADO数据连接方式连接数据库。VB集成环境的操作步骤:工程-〉添加数据环境,在工程窗口中选择连接环境,在属性窗口中将连接环境名称更改为DE1,将数据连接对象名称更改为Conn。在设计窗口中选择Conn对象,点击鼠标右健属性菜单,进行数据连接的设置,参见图11-2。首先设置数据连接的驱动程序,我们选择连接MSSQLSERVER2K数据库,因此选用MicrosoftOLEDBProviderforSQLSERVER驱动。图11-2数据连接-选择驱动程序选择数据驱动后,选择数据库服务器名称或IP地址(运行数据库的机器名称),数据库用户名称和密码(与数据库连接的用户名或密码),以及在数据库服务器上选择需要连接的数据库(建立的数据库名称),最后进行测试连接,参见图11-3。图11-3数据连接点击测试连接成功画面如下:图11-4测试成功这个成功连接的数据环境,已经设置的属性包括:连接字符串属性ConnectionSource:用于设置连接数据库的要素,数据库驱动程序,网络上数据服务器名称或IP地址,数据库用户名和密码,以及需要连接的数据库名。ConnectionSource=’Provider=SQLOLEDB.1;Password="";PersistSecurityInfo=True;UserID=sa;InitialCatalog=www;DataSource=beijing’连接数据库时间限制ConnectionTimeout:用于设置连接数据库的时间限制。ConnectionTimeout=15执行查询时间限制CommandTime:用于设置执行数据库操作的时间限制。CommandTime=30连接数据方法Open:用于连接数据库DE1.Conn.Open关闭数据方法Close:用于关闭数据库DE1.Conn.Close(3)执行数据库SQL操作在工程中数据连接环境同窗体一样,是全局量,因此我们可以在程序的任何位置使用这个环境来进行数据操作。执行数据库操作SQL命令的基本形式如下:DE1.Conn.ExecutestrSql对于没有返回结果集的SQL命令,如Insert,Update,delete等SQL命令,执行SQL数据操作命令的基本方式为使用数据环境DE1的数据连接对象Conn的方法Execute直接执行。SQL命令可以通过VB中的字符串连接方式构造。例如:strSql="insertintocustomer(cid,cname)values('kh01','liweimiao')"DE1.Conn.ExecutestrSql(4)获得数据库返回结果集对于有返回结果集的SQL命令,如select语句,需要把结果集付给VB程序中的ADO对象的Recordset集类型变量,基本形式如下:DimrstAsADODB.RecordsetSetrst=NewADODB.RecordsetDE1.Conn.OpenstrSql="select*fromsetup"rst.OpenstrSql,DE1.Conn,3,1Recordset是一个数据查询结果集,对象部分方法解释如下:Open方法用于返回查询结果集:recordset.OpenSource,ActiveConnection,CursorType,LockType,OptionsSource:可选,SQL语句、表名、存储过程调用ActiveConnection可选,有效Connection对象变量名。CursorType可选,CursorTypeEnum值,确定提供者打开Recordset时应该使用的游标类型:AdOpenForwardOnly(默认值)打开仅向前类型游标,AdOpenKeyset打开键集类型游标(常用),AdOpenDynamic打开动态类型游标(常用),AdOpenStatic打开静态类型游标。LockType可选,确定提供者打开Recordset时应该使用的锁定(并发)类型的LockTypeEnum值,可为下列常量之一,AdLockReadOnly(默认值)只读,AdLockPessimistic保守式锁定—提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录,AdLockOptimistic开放式锁定—提供者使用开放式锁定,只在调用Update方法时才锁定记录,AdLockBatchOptimistic开放式批更新—用于批更新模式。Options可选,长整型值,用于指示提供者如何计算Source参数。可为下列常量之一,adCmdText指示提供者应该将Source作为命令的文本定义来计算,adCmdTable指示ADO生成SQL查询以便从在Source中命名的表中返回所有行,adCmdTableDirect指示提供者更改从在Source中命名的表中返回所有行,adCmdStoredProc指示提供者应该将Source视为存储过程,adCmdUnknown指示Source参数中的命令类型为未知,adCmdFile指示应从在Source中命名的文件中恢复保留(保存的)Recordset,adAsyncExecute指示应异步执行Source,adAsyncFetch指示在提取InitialFetchSize属性中指定的初始数量后,应该异步提取所有剩余的行。如果所需的行尚未提取,主要的线程将被堵塞直到行重新可用,adAsyncFetchNonBlocking指示主要线程在提取期间从未堵塞。如果所请求的行尚未提取,当前行自动移到文件末尾。Recordset对象属性及方法:Move方法:移动指针到Recordset对象的指定位置MoveFirst方法:移动指针到Recordset对象的第一条记录MoveLast方法:移动指针到Recordset对象的最后一条记录MovePrevious方法:移动指针到Recordset对象的上一条记录MoveNext方法:移动指针到Recordset对象的下一条记录Recordset对象部分属性:BOF属性:判断当前Recordset对象的数据游标是否指向开始位置。EOF属性:判断当前Recordset对象的数据游标是否指向结尾位置。RecordCount属性:判断当前Recordset对象中的记录条数。PageSize属性:设定结果集的中每页显示的记录数量。AbsolutePage:返回结果集中的当前页码。PageCount属性:返回结果集的页面数量。(5)事务处理操作Connection连接对象能够完成事务处理功能,典型的事务处理包括:BeginTrans方法:事务处理开始,代表一系列事务处理开始CommitTrans方法:事务处理执行,将已经执行的动作在服务器上确认。RollbackTrans方法:事务回滚处理,将已经执行的动作取消,返回到事务处理前的状态。(6)执行存储过程Connection连接对象能够执行存储过程,基本形式就跟执行SQL命令一样,典型的语句形式如下:strSql1="execp2"DE1.Conn.ExecutestrSql1应用举例:例1:根据建立的某销售公司销售数据库,使用VisualBasic6.0建立客户信息维护应用程序。1.建立标准应用程序project1项目,在项目中添加窗体Form1,Form2,模块module1,数据连接环境DE1,参见图11-5,客户数据维护程序project1。图11-5客户数据维护程序2.完成数据连接。点击数据连接环境中的conn对象,点击右键选择属性,进行数据连接的属性设置,参见图11-6选择连接数据库驱动程序,MicrosoftOleDBProviderforSQLServer作为驱动程序。图11-6选择连接数据库驱动程序参见图11-7,选择数据库服务器Beijing,选择用户名sa,密码为空,允许保存密码,允许密码为空,选择数据库WWW,测试连接成功。图11-7选择数据库连接服务器,用户,密码,数据库3.数据环境测试后,需要打开数据库。设置程序的启动对象为SubMain()函数,并在该函数中打开数据库,并将Form1显示出来。Submain()DE1.Conn.OpenForm1.ShowEndSub4.在窗体form1上添加4个命令按钮,分别为查询记录,添加记录,更改记录,删除记录,分别完成数据记录的查询,添加MSFlexGrid控件,用于表格形式显示数据记录,添加文本框控件text1用于输入查询条件,设计的窗体如下图11-8。图11-8设计状态窗体Form15.在窗体Form2上添加一个框架frame1,添加6个输入数据的文本框Text1数组,添加标签,并添加命令按钮2个,分别完成数据确认和取消,涉及的窗体如下图11-9。图11-9设计状态的窗体Form26.编写完成数据表格的初始化子程序,代码如下:PrivateSubgrid()MSFlexGrid1.Cols=6MSFlexGrid1.AllowBigSelection=TrueMSFlexGrid1.FillStyle=flexFillRepeatMSFlexGrid1.Row=0MSFlexGrid1.Col=0MSFlexGrid1.Text="客户代码"MSFlexGrid1.ColWidth(0)=MSFlexGrid1.Width/6MSFlexGrid1.Col=1MSFlexGrid1.Text="客户名称"MSFlexGrid1.ColWidth(1)=MSFlexGrid1.Width/6MSFlexGrid1.Col=2MSFlexGrid1.Text="电话"MSFlexGrid1.ColWidth(2)=MSFlexGrid1.Width/6-100MSFlexGrid1.Col=3MSFlexGrid1.Text="手机"MSFlexGrid1.ColWidth(3)=MSFlexGrid1.Width/12MSFlexGrid1.Col=4MSFlexGrid1.Text="地址"MSFlexGrid1.ColWidth(4)=MSFlexGrid1.Width/3MSFlexGrid1.Col=5MSFlexGrid1.Text="邮编"MSFlexGrid1.ColWidth(5)=MSFlexGrid1.Width/12EndSub7.编写查询查询子程序,代码如下:PrivateSubCommand1_Click()DimiAsLongDimstrsqlAsStringDimrstAsADODB.RecordsetSetrst=NewADODB.Recordsetstrsql="select*fromcustomerwherecidlike'"+Text1.Text+"%'orcnamelike'"+Text1.Text+"%'"rst.Openstrsql,DE1.Conn,adOpenKeyset,adLockReadOnlyIfrst.RecordCount<>0ThenMSFlexGrid1.Rows=rst.RecordCount+1Fori=1Torst.RecordCountMSFlexGrid1.Row=iMSFlexGrid1.Col=0MSFlexGrid1.Text=rst.Fields("cid").ValueMSFlexGrid1.Col=1MSFlexGrid1.Text=rst.Fields("cname").ValueMSFlexGrid1.Col=2MSFlexGrid1.Text=IIf(IsNull(rst.Fields("ctel").Value),"",rst.Fields("ctel").Value)MSFlexGrid1.Col=3MSFlexGrid1.Text=IIf(IsNull(rst.Fields("cmobile").Value),"",rst.Fields("cmobile").Value)MSFlexGrid1.Col=4MSFlexGrid1.Text=IIf(IsNull(rst.Fields("caddr").Value),"",rst.Fields("caddr").Value)MSFlexGrid1.Col=5MSFlexGrid1.Text=IIf(IsNull(rst.Fields("czip").Value),"",rst.Fields("czip").Value)rst.MoveNextNextiElseMSFlexGrid1.Cols=1EndIfEndSub8.编写窗体的加载子程序,调用初始化表格,查询数据列表子程序,代码如下:PrivateSubForm_Load()gridCommand1_ClickEndSub9.编写表格选择数据记录子程序,设置一个窗体变量cid,并编写数据记录选择子程序,代码如下:OptionExplicitDimcidAsStringPrivateSubMSFlexGrid1_Click()IfMSFlexGrid1.Row>0ThenMSFlexGrid1.Col=0cid=MSFlexGrid1.TextEndIfEndSub10.窗体Form2的程序,在Form2代码中,增加一个窗体变量cid,用于判断是添加记录行为还是编辑记录行为。窗体2的代码如下:OptionExplicitPubliccidAsStringDimstrsqlAsStringPrivateSubCommand1_Click()DimrstAsADODB.RecordsetSetrst=NewADODB.RecordsetIfcid<>""ThenText1(0).Enabled=Falsestrsql="updatecustomersetcname='"+Text1(1).Text+"'"strsql=strsql+",ctel='"+Text1(2).Text+"'"strsql=strsql+",ctel='"+Text1(3).Text+"'"strsql=strsql+",ctel='"+Text1(4).Text+"'"strsql=strsql+",ctel='"+Text1(5).Text+"'"strsql=strsql+"wherecid='"+Text1(0).Text+"'"Elsestrsql="insertintocustomer(cid,cname,ctel,cmobile,caddr,czip)values('"+Text1(0).Text+"'"strsql=strsql+",'"+Text1(1).Text+"'"strsql=strsql+",'"+Text1(2).Text+"'"strsql=strsql+",'"+Text1(3).Text+"'"strsql=strsql+",'"+Text1(4).Text+"'"strsql=strsql+",'"+Text1(5).Text+"')"EndIfIfText1(0).Text=""OrText1(1).Text=""ThenMsgBox"客户代码或客户名称不能为空",vbOKOnlyExitSubEndIfIfcid<>""Thenstrsql="select*fromcustomerwherecid='"+Text1(0).Text+"'"rst.Openstrsql,DE1.Conn,adOpenKeyset,adLockReadOnlyIfrst.RecordCount<>0ThenMsgBox"客户代码重复!",vbOKOnlyExitSubEndIfEndIfDE1.Conn.ExecutestrsqlHideUnloadMeEndSubPrivateSubCommand2_Click()HideUnloadMeEndSubPrivateSubForm_Activate()DimrstAsADODB.RecordsetSetrst=NewADODB.RecordsetIfcid<>""Thenstrsql="select*fromcustomerwherecid='"+cid+"'"rst.Openstrsql,DE1.Conn,adOpenKeyset,adLockReadOnlyIfrst.RecordCount<>0ThenText1(0).Text=rst.Fields("cid").ValueText1(1).Text=rst.Fields("cname").ValueText1(2).Text=IIf(IsNull(rst.Fields("ctel").Value),"",rst.Fields("ctel").Value)Text1(3).Text=IIf(IsNull(rst.Fields("cmobile").Value),"",rst.Fields("cmobile").Value)Text1(4).Text=IIf(IsNull(rst.Fields("caddr").Value),"",rst.Fields("caddr").Value)Text1(5).Text=IIf(IsNull(rst.Fields("czip").Value),"",rst.Fields("czip").Value)EndIfEndIfEndSubPrivateSubForm_Load()Me.Left=(Screen.Width-Me.Width)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论