



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、使用 ADO 连接数据源 一般来说当建立基于对话框的应用程序时,都选择使用 ADO 比较方便(这纯属个人习 惯问题)。 1.直接在应用程序中建立与数据库的 connection 2.自己写一个 ADOConnection 类作为应用程序操作数据库的接口,这样操作的层次更 明显,程序的分层思想也体现较好。 下面分别就这两种方法做个总结。 1.直接在应用程序中建立与数据库的 connection 在应用程序中要使用 ADO,则需要引入 ADO 的动态连接库。其方法为: 在 StdAfx.h 中: #import “c:program filescommon filessystemadomsado15.dll“ no_namespace rename(“EOF“,“adoEOF“) 目的:产生 msado15.tlh 和 msado15.tli 两个头文件来定义 ADO 库。 定义好 ADO 库后,应初始化 COM 库环境。其方法为: 在 C*APP:InitInstance 中定义_ConnectionPtr m_pConnection; AfxOleInit();/使用 AfxOleInit 初始化 OLE/COM 库环境 /创建 ADO 连接 m_pConnection.CreateInstance(_uuidof(Connection); /在 ADO 操作中使用 try.catch 捕获错误 try m_pConnection- Open(“provider=SQLOLEDB;server=ZENGYH;database=postms;uid=sa;pwd=hongyi“,“,“,ad ModeUnknown); catch (_com_error e) AfxMessageBox(“ 连接数据库失败!“); return FALSE; 而相应的释放数据库的连接: 在 C*APP: ExitInstance 中: m_pConnection-Close(); :OleUninitialize(); 至此,关于数据库的连接与断开就能顺利实现,接下来将是对数据库中表的操作,即 对记录集操作。 当操作数据库的表时,需先声明数据集指针:_RecordsetPtr m_pRecordset; 与创建 ADO 连接类似,需要在所操作的对话框类的 OnInitDialog()中创建记录集对象: m_pRecordset.CreateInstance(_uuidof(Recordset); 如此之后将可以使用 m_pRecordset 来查询,修改,删除数据库等。 打开要操作的表可使用 m_pRecordset 的 open 函数 m_pRecordset-Open(“select * from STUDENTS“,theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adC mdText); GetInterfacePtr 是得到 COM 对象的实例指针 记录集的查询操作: 使用可以使用如下的函数来实现记录集的移动 MoveFirst, MoveNext , MovePrev,MoveLast。 提取列属性:GetCollect(“列名”),注意:此处的返回值类型为: _variant_t,这个类 型类包含了许多与 c+所支持的类型的转换函数,较常用的是与 cstring 类型的转换 (LPCSTR)_bstr_t(_variant_t 类型变量 )。 记录集的增加操作: 确保要操作的记录集打开之后,首先调用 m_pRecordset-AddNew(),AddNew 之后将 自动生成一个供记录集域值使用的新的空记录,来存放即将增加的数据信息,系统将自动 执行 sql 的 insert 语句来插入记录。 然后通过设置列属性:PutCollect(“列名”,_variant_t 可以删除当前 的记录。 再 Update 即可。 当然,在每次需要对记录集操作之前应当打开需要操作的表的记录集,操作完毕应关 闭相应记录集,这样可以保证只声明一个记录集指针,每次只操作一个记录集,可以节约 资源。 另外,在修改和删除操作中也可能需要查询满足条件的记录,可以这样实现: str.Format(“select * from STUDENTS where StuID=%s“,m_StuID); m_pRecordset- Open(str.AllocSysString(),theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOp timistic,adCmdText); 2.自己写一个 ADOConnection 类作为应用程序操作数据库的接口 通过自定义的 ADOConnection 类封装与应用程序操作数据库的接口 (在这个类中应首 先声明_ConnectionPtr 和_RecordsetPtr 指针) ,这个类中要实现的功能包括:定义 ADO 库, 初始化与 ADO 的连接,释放连接,初始化记录集(方法 1 的初始化是在相应类的 OnInitDialog()中实现),执行 SQL 语句 定义 ADO 库,初始化与 ADO 的连接,释放连接与方法 1 一致; 初始化记录集: _RecordsetPtr m_pRecordset.CreateInstance(_uuidof(Recordset); m_pRecordset- Open(mySql,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); catch (_com_error *e) AfxMessageBox(e-ErrorMessage(); return m_pRecordset; 执行 SQL 语句主要使用 connection 来实现( 不同于方法 1 利用记录集来实现) bool CAdoConnection:ExecuteSql(_bstr_t mySql) m_pConnection-Execute(mySql,NULL,adCmdText); 至此,在应用程序中可以通过定义这个 ADOConnection 的实例来完成相应的操作。 查询操作: 首先定义 ADOConnection,执行初始化 ADO 连接; 根据查询条件取得记录集指针: _bstr_t mySql=“select * from COURSES where CouID=“+m_CouID+“; _RecordsetPtr myRecordset=myConnection.GetRecordset(mySql); 根据指针的返回情况进行处理。 添加操作: 首先根据实际情况判断所要添加的记录是否存在(类似查询) ; 若返回的指针是为空, 则说明要添加的记录不存在,则可以执行 insert: mySql=“insert into COURSES values(“+m_CouID+“,“+m_CouName+“,“+CouScore+“,“+CouTea+“,“+m_CouKind+“)“; myConnection.ExecuteSql(mySql); 修改操作、删除操作: 与添加操作类似,执行 update 和 delete 语句 说明:每个函数中的初始化 ADOConnection 和释放应相对应。 与方法 1 相比,不需要单条操作记录集,记录集指针也可以声明多个,执行 sql 语 句更方便。 记录集的初始化可以通用到 ADOConnection 类中,而无需方法 1 中在不同的类中初始 化各自的记录集。 二、使用 ODBC 连接数据源 一般来说建立基于文档视图的应用程序时,使用此方法连接数据源。 1.使用 CDatabase 类中的 executesql 执行 SQL 语句 当创建基于单文档的应用程序时,若在第二步选择 database view with file support,则 需要配置 ODBC 数据源(如 student 表),并且生成的应用程序的基类为 recordview。那么生 成的应用程序的 Doc 类中将自动生成所绑定的数据集类(cstudentset m_studentset),View 类 中将自动生成(cstudentset *m_pset)。 连接数据库: 对数据库的连接要重载 BOOL CStudentDoc:OnNewDocument(): 在该函数中加入这样的代码(m_database 是我在文档类中定义的成员变量 CDatabase): if(m_pStudentSet=NULL) m_pStudentSet=new CStudentSet( CString strConnect=m_pStudentSet-GetDefaultConnect(); m_database.Open(NULL,false,false,strConnect,false); 这里 m_pStudentSet 是在该文档类中重新定义的一个 CStudentSet 记录集指针,至此可 以建立应用程序与数据库的连接。 添加记录操作: 在相应函数中声明 CDatabase m_database 在函数中定义 CStudentSet mySet( 再打开记录集 myset.open(); mySet.AddNew(); CString mySql; mySql=“insert into STUDENTS(StuID,StuName) values(“+m_pSet- m_StuID+“,“+m_pSet-m_StuName+“)“; m_database.ExecuteSQL(mySql); mySet.Update(); 删除记录、修改记录操作: 在函数中定义 CStu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级英语上册 Unit 3 Is this your pencil第3课时教学设计(新版)人教新目标版
- 防灾减灾日地震安全培训
- 三年级上美术教学设计-天外来客-苏少版
- 对客服务用语规范性培训
- 二年级语文下册 第六单元 17 要是你在野外迷了路教学设计 新人教版
- 2024中国铝业集团有限公司华东区域法律中心法律顾问招聘1人笔试参考题库附带答案详解
- 人教部编版六年级下册第二单元单元综合与测试表格教案及反思
- 九年级化学下册 第8单元 金属和金属材料 实验活动4 金属的物理性质和某些化学性质教学设计 (新版)新人教版
- 九年级道德与法治上册 第3单元 推进政治文明 第6课 建设法治中国 第2框 弘扬法治精神教学设计 北师大版
- 七年级地理下册 第七章 第三节 印度教学设计 新人教版
- 汉字的五行属性与三才五格计算方法
- 唐山高科总部大厦幕墙工程幕墙招标技术评估总结
- 苏教版三年级下册数学 第三单元 解决问题的策略 测试卷
- 生产作业流程图
- 10kV线路拆除
- 高中学生选课指导手册
- 为老年人更换纸尿裤评分标准
- 教务管理系统UML模型PPT课件
- 吸收塔及烟囱施工方案
- 高中数学答题卡模板word版(共2页)
- 小型构件预制场建设方案
评论
0/150
提交评论