《【教学课件】第13章ADO数据库编程.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第13章ADO数据库编程.ppt(21页珍藏版)》请在三一办公上搜索。
1、第13章 ADO数据库编程,数据库编程的方法有很多种,例如ODBC,OLE DB等。目前使用ADO(ActiveX Data Objects)对数据库进行开发是主流,本章将讨论如何使用ADO进行数据库开发。,13.1 使用ADO开发程序,所有数据库编程方法要包括以下几步:(1)连接数据库;(2)执行SQL语句;(3)断开数据库连接。本节将介绍如何使用ADO完成以上3个步骤。,13.1.1 使用ADO库之前的准备工作,在VC+中使用ADO操作数据库必须首先导入ADO库。可以使用以下代码导入ADO库。#import C:Program FilesCommon FilesSystemadomsado
2、15.dll no_namespace rename(EOF,rsEOF)ADO库在msado15.dll动态连接库中,上面的代码使用#import指令导入ADO库。no_namespace表示本例中不使用命名空间,由于EOF在C+中表示文件尾部(End Of File),所以将ADO中的EOF重命名为rsEOF,表示最后一条记录。其使用方法会在后面介绍。,13.1.2 使用Connection对象连接数据库,ADO中负责连接数据库的是Connection对象。Connection对象的ConnectionString属性表示连接字符串,连接字符串表示连接数据库需要的信息(包括数据库名、服务器
3、地址、账号和密码等)。不同数据库服务器的连接字符串可能不同。通常,SQLServer的连接字符串格式为Provider=数据提供者;Password=数据库密码;User ID=数据库账号;Initial Catalog=要连接的数据库名;Data Source=数据库服务器IP或服务器名。设置连接字符串之后,便可以打开到数据库的连接。使用Open方法可以连接到数据库服务器,使用Close方法可以在不使用数据库后断开连接。,13.1.3 向数据库服务器提交SQL语句,从上一节的例子可以看出,使用Connection对象可以连接到数据库。实际上,Connection对象也能向数据库提交SQL语句
4、。使用Connection对象的Execute方法,可以将SQL语句提交到数据库并且执行。Execute的定义如下。_RecordsetPtr Execute(_bstr_t CommandText,/要执行的SQL语句VARIANT*RecordsAffected,/如果不是Select语句,将影响行数放置到此参数中long Options/选项,adCmdText表示普通SQL语句/adCmdStoredProc表示存储过程),13.1.4 使用Recordset对象获取Select语句查询结果,当向数据库提交Select语句时,函数不会受到影响,而是通过返回值返回一个Recordset对
5、象。通过Recordset对象可以遍历Select查询结果。例如,下面的代码查询了Employees表中员工的姓名:,13.2 ADO中的异常处理,如果用户指定连接字符串违法,或者连接数据库以后执行的SQL语句有语法错误,那么会产生一个_com_error类型的异常。由于数据库操作最重要的就是数据的安全,所以在使用ADO操作数据库时要时刻牢记捕捉异常。下面的代码演示了如何在程序中捕捉异常。,13.3 封装自己的ADO类,为了更方便地使用ADO进行数据库编程,本节将对ADO进行封装,此ADO类可以在以后的开发过程中随意地使用。,13.3.1 类的声明,ADO类的声明如下。类中重载了“+”操作符,
6、用来将当前的记录后移,同时重载了“”操作符,可以通过字段名得到字段值。使用Open方法可以连接数据库,用Close方法可以关闭连接,用Execute方法可以执行SQL语句。,13.3.2 类的实现,以下代码为类的实现部分。类的实现部分没有做任何异常处理,所以需要在使用此ADO类的时候捕捉异常。,13.3.3 ADO类的使用,下面的代码演示了刚刚编写完毕的ADO类的使用方法。程序首先创建了一个CADOConn对象,并且通过构造函数将连接字符串设置给内部的Connection对象,然后调用Open方法连接数据库,使用Execute执行了3次SQL语句,最后调用Close方法关闭连接。,13.4 应
7、用案例ACCESS数据库查看器,前面学习了ADO的相关操作,并编写了CADOConn类来封装ADO操作。本节将使用前面编写的CADOConn类来开发一个通用的ACCESS数据库查看器。,13.4.1 案例效果图,案例的效果图。,13.4.2 案例需求,开发Access查看器,具体要求如下。打开某个Access数据库文件(扩展名MDB),列举出数据库中的所有表(不包括系统表)。选择某个表,可以列举出表中的记录。双击某条记录,可以查看记录的详细信息,同时方便进行复制与粘贴操作。打开某个表后,可以根据表的字段与关键字筛选显示的记录。,13.4.3 需要掌握的知识点,文档窗口编程,使用文档窗口显示列表
8、数据。ADO数据库开发,使用ADO操作数据库。CListCtrl与CTreeCtrl控件的使用,分别用来显示表中的记录与数据表列表。,13.4.4 创建工程,此Access数据库查看器为单文档程序,工程的创建步骤如下。(1)新建单文档程序,工程名为eg_4_accesslook。(2)在应用程序向导第4步,勾选掉默认选项中的“Docking toolbar”复选框、“Initial status bar”复选框、“Printing and print preview”复选框,如图所示。(3)在应用程序向导第5步,选择“Windows Explorer”单选按钮,如图所示。单击“Finish”按
9、钮,完成工程的创建。,13.4.5 修改框架窗口样式,在CMainFrame:PreCreateWindow中修改窗口样式。去掉窗口的文档标题(FWS_ADDTOTITLE样式),使窗口标题显示为“ACCESS数据库查看器”。BOOL CMainFrame:PreCreateWindow(CREATESTRUCT,13.4.6 添加操作数据库对话框资源及其对应的FormView,本小节将在文档程序中添加一个FormView(用来显示对话框的视图)。具体操作步骤如下。(1)添加对话框资源IDD_OPERATE(完成打开数据库,查询记录等功能)。设置对话框字体属性为“宋体;9号”、Style属性为
10、“Child”、Border属性为“None”(此对话框会作为CFormView视图,CFormView中显示的对话框是子窗口,所以要有Child属性)。(2)设计对话框界面。(3)添加基类为CFormView的视图类COperateFormView,选择对话框ID为IDD_OPERATE。此时程序中有3个视图,如图所示。,13.4.7 切分窗口,重新切分窗口,使COperateFormView在最上方,CLeftView在左下方,CEg_4_accesslookView在右下方。具体操作步骤如下。(1)添加CSplitterWnd对象m_wndSplitter2。protected:CSpl
11、itterWnd m_wndSplitter;CSplitterWnd m_wndSplitter2;/新添加的CSplitterWnd对象(2)修改CMainFrame:OnCreateClient,重新切分窗口。,13.4.8 操作数据库,前面已经完成了程序的界面设计,下面开始真正使用ADO操作数据库。具体操作步骤如下。(1)将CADOConn类的源文件与头文件复制到工程目录下,并添加到工程中。(2)因为要使用ADO,所以要在适当的时候加载和释放COM库。本例在应用程序类的构造函数中加载COM库,在应用程序类的析构函数中释放COM库。(3)在文档类中定义视图类需要使用的对象(由于视图类可以
12、使用GetDocument获得文档类指针,所以将数据定义到文档类方便访问)。同时在文档类的构造函数中为CString类型对象初始化。(4)编写对话框IDD_OPERATE中“打开数据库”按钮的单击事件,代码如下。(5)当调用文档窗口的UpdateAllViews方法时,各个视图类的OnUpdate方法会被调用。重写CLeftView的OnUpdate方法,并在OnUpdate方法中将数据库中的表列举出来。(6)当选择CLeftView中的某个节点时,会触发TVN_SELCHANGED消息。添加CLeftView的TVN_SELCHANGED消息响应。当选择某个表时,调用UpdateAllVie
13、ws更新其他2个视图显示的内容。(7)重写CEg_4_accesslookView类的OnUpdate方法,并在此方法中显示SQL语句查询的结果。其中使用了一个自定义函数VariantToString,此函数功能为将VARIANT类型转换为CString类型。(8)CEg_4_accesslookView默认不是以Report方式显示列表的,所以要在CEg_4_accesslookView类的OnInitialUpdate函数中修改CEg_4_accesslookView的样式,同时添加网格线扩展样式。(9)当双击某个列表项时,需要显示记录的详细信息。新建对话框资源IDD_RECORDDETA
14、IL,文本框ID为IDC_EDIT_DETAIL,设置文本框的“Read-only”属性。添加详细信息对话框类CRecordDetailDlg。为文本框IDC_EDIT_DETAIL关联CString类型变量m_strDetail。当双击某个列表时会触发NM_DBLCLK事件。,13.5 小结,本章主要讲述了使用ADO操作数据库的方法,并且在最后通过一个实际案例讲解如何在实际开发中使用ADO。Connection对象可以管理数据库的连接,同时也可以将SQL语句提交给数据库并且执行。如果提交的SQL语句是Select查询语句,Execute返回的结果是一个Recordset对象,通过Recordset对象,可以遍历Select语句查询的结果。,