



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在vc中,使用ODBC连接是数据库有两种方法,第一种就是使用ODBC API,第二种就是使用MFC ODBC,在这里我只谈一下MFC ODBC。 为了使数据库开发变得更方便,Microsoft对ODBC API进行的封装,使得我们开发数据库时可以直接使用MFC ODBC类: CDatabase:建立与数据源的连接 CRecordset:获取记录集 CRecordView:提供一个表单视图与某个记录集直接相连,利用对话框数据交换机制(DDX)在记录集与表单视图的空间之间传输数据 CFieldExchange:支持记录字段数据交换(DFX),即记录集字段数据成员与相应的数据库的表的字段之间的数据交换 CDBException:ODBC的异常类 一、 在实际开发中,使用MFC ODBC类访问数据库步骤如下: a . 使用CDatabase类方法打开数据源: 定义CDatabase对象m_db;调用其OpenEx方法打开数据源,OpenEx原型如下: virtual BOOL OpenEx( LPCTSTR lpszConnectString, DWORD dwOptions=0 ); 参数一为连接字串:如DNS=memo;UID=sa;PWD=123,DNS为数据源名称,注意到如果为lpszConnectString传递NULL,则将 出现数据源对话框,提示用户选择一个数据源。 参数二为打开方式,缺省值0表示以共享方式打开数据库,带有写访问,不装入ODBC游标库DLL,并且只有在没有足够信息形 成连接时显示ODBC连接对话框。可选参数如下: CDatabase:openExclusive:此类库版本不支持。为共享数据源总是打开的。如果选定此选项,断言失败。 CDatabase:openReadOnly:以只读方式打开 CDatabase:UseCursorLib 装入ODBC游标库DLL。游标掩盖了基础ODBC驱动程序的一些功能,有效地阻止使用动态集(如果 驱动程序支持它们)。如果装入游标库,支持的唯一游标是静态快照和只能向前游标。缺省值为TRUE。如果计划从CRecordset直接创建 一个记录集对象而不派生,则不应装入游标库。 CDatabase:noOdbcDialog:不管是否提供了足够的连接信息,不显示ODBC连接对话框。 CDatabase:forceOdbcDialog:总是显示ODBC连接对话框。 如果要使用信任连接,即不需要用户名和密码,则应该使用Open方法,但在打开记录集时有限制,见后。 (注:创建数据源方法:控制面板管理工具数据源(ODBC)添加,选择对应的驱动程序,如数据库在SQL Server下则选择 SQL Server完成输入数据名称,描述,选择服务器(local),下一步,选择用户输入登陆ID和密码的SQL Server验证,输入登陆ID和 密码,下一步,勾选更改默认数据库,下一步,完成,测试。) b . 定义CRecordset对象,调用其Open方法打开记录集,如 CRecordset rs(&m_db); virtual BOOL Open( UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL = NULL, DWORD dwOptions = none ); 参数一为打开类型,如下: AFX_DB_USE_DEFAULT_TYPE:默认值 CRecordset:dynaset:动态记录集,支持双向游标,并保持同所连接的数据源同步,对数据的更新操作可以通过一个fetch操 作获取。 CRecordset:snapshot:静态快照,一旦形成记录集,此后数据源的所有改变都不能体现在记录集里,应用程序必须重新进行 查询,才能获取对数据的更新。该类型记录集也支持双向游标。 CRecordset:dynamic:同CRecordset:dynaset记录集相比,CRecordset:dynamic记录还能在fetch操作里同步其它用户对数据 的重新排序,大部分ODBC驱动程序不支持这种记录集 CRecordset:forwardOnly:除了不支持逆向游标外,其它特征同CRecordset:snapshot相同。 参数二为sql查询语句,查询结果保存在记录集中 参数三指定创建记录集时的常用选项 CRecordset:none:无选项(缺省),与其它所有选项互斥,可以更新、删除、添加记录 CRecordset:appendOnly:不允许修改和删除记录,但可以添加记录 CRecordset:readOnly:记录集是只读的 其它选项查看MSDN 使用信任连接时,如果使用CRecordset:dynaset会出现ODBC不支持动态记录集错误出现CRecordset:dynamic打开记录集,会出现 ODBC不支持动态指针错误,而用CRecordset:forwardOnly则出现无效的游标位置错误 c . 绑定记录集(通过RFX) 通过向导插入CMySet类且以CRecordset为基类时,会自动生成与表字段对应的变量,并在CMySet的DoFieldExchange中自动与表 字段绑定,如:RFX_Long(pFX,_T(列名),变量名);pFX为CFieldExchange类指针。(注意字段类型) 绑定之后,就可以使用这些变量更新对应字段,如添加,先调用AddNew,然后调用SetFieldNull($变量名,FALSE)将该字段标记 为脏数据(changed),最后给变量赋值,调用Update将新记录保存到数据库,Requery刷新记录集并将记录集指针回到第一条记录处,完成 插入。在AddNew和Edit后必须Update完成操作。调用Edit后可以修改当前记录。 d . 参数化记录集和查询 CRecordset成员变量:m_strFilter负责对记录集进行过滤,它存放着sql语句中where子句的条件字符串,通过 m_strfilter=列名=值方式赋值,赋值后调用该对象打开或刷新的记录集已经过滤,并且参数二只需给出表名rs.Open (CRecordset:snapshot,book)。m_strSort对记录集进行排序,m_strSort=列名.如果在Open的lpszSQL参数中已包括了WHERE和 ORDER BY子句,那么m_strFilter和m_strSort必需为空 除直接赋值外,还可以使用参数化: (1) 声明参变量,代码如下: CString strName; int nAge; (2) 在构造函数中初始化参变量如下: strName =_T(); nAge =0; m_nParams=2; (3) 将参变量与对应列绑定,代码如下: pFX-SetFieldType(CFieldExchange:param) RFX_Text(pFX,_T(Name), strName); RFX_Single(pFX,_T(Age), nAge); 完成以上步骤之后就可以利用参变量进行条件查询了,代码如下: m_pmyRS-m_strFilter=Name=? AND age=?; m_ pmyRS - strName =feng; m_ pmyRS -nAge=20; m_ pmyRS -Open();/如果记录集已经打开,则刷新 参变量的值按绑定的顺序替换查询字串中的“?”通配符。 f . 书签定位:在当前记录处设置书签,经过一系列移动后再查找该书签处记录,可直接返回书签位置 CDBvarint bookmark; rs.GetBookmark(bookmark);/获取当前记录保存到书签中 rs.SetBookmark(bookmark);/返回书签位置 使用书签前可通过CRecordset:CanBookmark确定是否支持书签定位,如果是,还需要在记录集的Open函数的dwOptions中加上 CRecordset:useBookmark,在调用之前调用CDatabase:GetBookmarkPersistence来核对是否可以安全调用SetBookmark 绝对定位: row=10; rs.SetAbsoutePosition(row); 只向前滚动的记录集不支持定位。 注:如果不涉及从数据库中获取记录,就不需要打开记录集,在数据源打开后,直接调用CDatabase:ExecuteSQL执行sql语句,如插 入、删除、更新等。只有在需要从数据库中获取记录时才打开记录集,用while( ! rs.IsEOF( )判断是否超出记录集最后一条记录,如果 没有绑定记录集,可用GetFieldValue取当前记录的字段值,用MoveNext移到下一条记录。绑定记录集后,变量的值就是数据库中对应的 字段的值,可以直接对变量进行操作,不需要再用GetFieldValue获取。对于数据库中的数据类型与c+数据类型的转换,我将另外讨论 。 二、事务处理 首先调用CDatabase:BeginTrans( )开始事务,CommitTrans提交事务,Rollback回退,撤销操作 三、异常处理:在数据库编程时,一般会出现的异常可用以下语句捕获 TRY . CATCH(CDBException,ex) AfxMessageBox (ex-m_strError); AfxMessageBox (ex-m_strStateNativeOrigin); AND_CATCH(CMemoryException,pEx) pEx-ReportError(); AfxM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手语翻译安全综合竞赛考核试卷含答案
- 2025年橡胶板、杆、型材项目合作计划书
- Lesson 128 He caift be He must be 说课稿-2025-2026学年初中英语第一册 下半册新概念英语
- 成都电工证考试题模拟试题及答案
- 气球造型培训课件
- 基于NU-1000的给体-受体型光催化剂的合成与性能研究
- 静电记录头制作工岗前实操知识能力考核试卷含答案
- 气球派对基础知识培训班课件
- 地质调查员8S考核试卷含答案
- 第2课 丛林之美-电子相册制作教学设计-2025-2026学年小学信息技术(信息科技)六年级上册清华大学版
- 城乡燃气管道维护保养技术方案
- 2025年西藏公开遴选公务员笔试试题及答案(A类)
- 水土保持治理工应急处置考核试卷及答案
- 初中学生心理健康辅导手册
- 工业园区储能项目商业计划书
- 仓库搬运安全培训内容课件
- 【基于财务状况质量分析理论的京东财务报表分析案例18000字(论文)】
- 抗炎药物作用机制研究-洞察及研究
- 2025至2030中国航空保险行业项目调研及市场前景预测评估报告
- (2025年标准)吊篮移交协议书
- 中专院校普法课件
评论
0/150
提交评论