版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习情境七数据库编程任务一使用ODBC类编写对数据库的操作(增、删、改、查)任务二使用ADO类编写对数据库的操作(增、删、改、查)返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)知识导读开放数据库互连(OpenDatabaseConnectivity,ODBC)是微软公司开放服务结构中有关数据库的一个组成部分。它建立了一组规范,并提供了一组对数据库访问的标准API。这些API函数利用SQL来完成其大部分任务。目前很多数据库应用程序都使用ODBC来访问数据库。下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)MFCODBC类封装了ODBCAPI使得利用MFC来创建ODBC数据库应用程序变得非常简便。MFCODBC常用的类有三个:CDatabase、CRecordset、CRecordView。CDatabase类的对象用于建立和连接数据源。CRecordset类的对象代表从数据源获取的记录集,该类主要用于对数据库的操作。CRecordView类的对象提供一个表单视图来显示和操作记录集。CRe⁃cordView类派生于CFormView类,同时又绑定了一个记录集,所以该类的对象可以利用单视图方便地显示、修改、添加、删除记录。上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)知识点详解1.创建数据库为了讲解数据库编程技术,需要创建一个数据库用于示范VisualC++中的数据库操作方法。为了让读者尽快掌握数据库编程的方法,本情境采用数据库中最易于理解的Access数据库配合VisualC++数据库开发技术的讲解。2.创建ODBC数据源应用程序想要通过MFCODBC方式访问一个数据库,首先需要用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)示例ex07_01:使用ODBC类编写一个管理学生信息数据库的程序。【完成步骤】步骤1创建Access数据库。(1)打开Access2007,单击“空白数据库”选项,修改文件名为“学生信息数据库.accdb”,保存到示例ex07_1,出现图7-1所示的界面。(2)单击“创建”按钮,进入图7-2所示的学生信息数据库文件界面。上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)(3)进入学生信息数据库文件编辑界面。按下“Ctrl+S”组合键,修改表名称为:学生信息表。用鼠标右键单击“学生信息表”,选择“设计视图”模式,弹出如图7-3所示的表设计器。为“学生信息表”添加相应的字段,并选择合适的数据类型和字段大小。(4)打开“学生信息表”,在表中添加3条记录,如图7-4所示。步骤2创建ODBC数据源。(1)在Windows开始菜单中,选择“管理工具”中的“数据源(ODBC)”菜单项,弹出如图7-5所示的“ODBC数据源管理器”对话框。上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)(2)在“ODBC”数据源管理器对话框中单击“添加”按钮,弹出如图7-6所示的“创建新数据源”对话框。在Windows7的64位系统中,在C:\\Windows\SysWOW目录下找到odbcad32.exe,然后双击打开即可。(3)用鼠标双击“创建新数据源”对话框的“MicrosoftAccessDrive(∗.mdb,∗ac⁃cdb)”选项,弹出如图7-7所示的“ODBCMicrosoftAccess安装”对话框。(4)在“ODBCMicrosoftAccess安装”对话框中打开“学生信息数据库.accdb”数据库文件,然后单击“确定”按钮,这样注册数据源就完成了,如图7-8所示。上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)(5)回到“ODBC数据源管理器”对话框之后就可以看到,“用户DSN”选项卡中就会多出一个名为“学生信息数据源”用户数据,如图7-9所示。步骤3创建项目并设计界面。(1)创建一个项目名为“ex07_1”的对话框应用程序,并为其添加相应的控件。设置列表视图属性View为Report类型,如图7-10所示。(2)控件ID和Caption的设置情况见表7-1。(3)在资源视图中插入一个新的对话框,利用这个对话框实现数据的添加和修改操作。首先设置其Caption为“添加修改学生信息”,ID为IDD_DIALOG_STUINFO,然后为其添加相应的控件,如图7-11所示。上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)(4)控件ID和Caption的设置情况见表7-2。(5)双击“添加修改学生信息”对话框界面,为其关联对话框类CStuInfoDlg,如图7-12所示。(6)编辑框关联变量见表7-3。步骤4创建ODBC记录集类。(1)用鼠标右键单击项目名称“ex07_1”,在弹出的快捷菜单中选择:添加->类->MFCODBC使用者->添加,如图7-13所示。(2)单击“数据源”按钮,弹出“选择数据源”对话框。选择“机器数据源”选项卡,选中“学生信息数据源”,单击“确定”按钮,如图7-14所示。上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)(3)“授权”区域的登录名称和密码不用设置,直接单击“确定”按钮,回到“选择数据库对象”对话框,如图7-15所示。(4)单击“确定”按钮,在弹出的“MFCODBC使用者”对话框中,将默认的生成类“CDataRowet”修改为“CStuInfoSet”,并取消“绑定所有列”,如图7-16所示。(5)重写StuInfoSet.cpp文件中的GetDefaultConnect()函数,代码如下:CStringCStuInfoSet::GetDefaultConnect(){return_T("ODBC;DSN=学生信息数据源");}上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)步骤5布局列表控件。为列表框关联一个名为m_listStuInfo的CListCtrl变量。在Cex07_1Dlg::OnInitDialog()函数中添加对话框初始化代码,完成视图列表框控件的布局。代码如下:BOOLCex07_1Dlg::OnInitDialog(){//TODO:在此添加额外的初始化代码m_listStuInfo.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSE⁃LECT);上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)//设置列表视图为网格类型且全选状态m_listStuInfo.InsertColumn(0,"学号",LVCFMT_CENTER,80);m_listStuInfo.InsertColumn(1,"姓名",LVCFMT_CENTER,80);m_listStuInfo.InsertColumn(2,"性别",LVCFMT_CENTER,60);m_listStuInfo.InsertColumn(3,"年龄",LVCFMT_CENTER,60);m_listStuInfo.InsertColumn(4,"系别",LVCFMT_CENTER,120);returnTRUE;
//除非将焦点设置到控件,否则返回TRUE}上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)步骤6编写显示学生信息函数。为了能够便捷地显示数据库数据,需要为Cex07_1Dlg类编写一个显示学生信息的函数ListStuInfo(),完成数据的显示任务。(1)在Cex07_1Dlg.h中声明函数:public:voidListStuInfo(CStringstrSQL);(2)在StuInfoSet.h文件中为CStuInfoSet类添加下列属性:CStringm_StudentID;
//学号CStringm_StuName;//姓名上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)CStringm_StuSex;//性别intm_StuAge;//年龄CStringm_StuDept;//系部(3)利用构造函数CStuInfoSet()初始化属性值:CStuInfoSet::CStuInfoSet(CDatabase*pdb):CRecordset(pdb){m_StudentID=_T("");m_StuName=_T("");m_StuSex=_T("");m_StuAge=0;上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)m_StuDept=_T("");m_nFields=5;m_nDefaultType=dynaset;}(4)调用函数DoFieldExchange()实现在记录集的字段数据成员和数据源中的相应的记录之间交换数据:voidCStuInfoSet::DoFieldExchange(CFieldExchange*pFX){pFX->SetFieldType(CFieldExchange::outputColumn);//RFX_Text()和RFX_Int()这类宏依赖的是//成员变量的类型,而不是数据库字段的类型。//ODBC尝试自动将列值转换为所请求的类型上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)pFX->SetFieldType(CFieldExchange::outputColumn);RFX_Text(pFX,_T("[StudentID]"),m_StudentID);RFX_Text(pFX,_T("[StuName]"),m_StuName);RFX_Text(pFX,_T("[StuSex]"),m_StuSex);RFX_Int(pFX,_T("[StuAge]"),m_StuAge);RFX_Text(pFX,_T("[StuDept]"),m_StuDept);}上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)(5)在Cex07_1Dlg.cpp中添加:#include"StuInfoSet.h"//CStuInfoSet类的头文件voidCex07_1Dlg::ListStuInfo(CStringstrSQL){m_listStuInfo.DeleteAllItems();//首先清空列表视图中的所有数据CStuInfoSetstuInfoSet;//创建一个记录集对象if(!stuInfoSet.Open(CRecordset::dynaset,strSQL,CRecordset::readOn⁃ly))//连接数据源并执行SQL语句上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查){MessageBox("链接数据源失败!");return;}CStringstrTmp;for(inti=0;!stuInfoSet.IsEOF();i++)
{m_listStuInfo.InsertItem(i,stuInfoSet.m_StudentID);m_listStuInfo.SetItemText(i,1,stuInfoSet.m_StuName);m_listStuInfo.SetItemText(i,2,stuInfoSet.m_StuSex);strTmp.Format("%d",stuInfoSet.m_StuAge);//将整型转换为CString型上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)m_listStuInfo.SetItemText(i,3,strTmp);m_listStuInfo.SetItemText(i,4,stuInfoSet.m_StuDept);stuInfoSet.MoveNext();}stuInfoSet.Close();//关闭记录集UpdateData(FALSE);//关联变量值传递给控件显示}运行结果如图7-17所示。上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)步骤7“添加”功能的实现。(1)在ex07_1Dlg.h中添加成员变量:public:CStringm_strName;//姓名CStringm_strNum;//学号UINTm_unitAge;//年龄CStringm_strDept;//系别CStringm_strSex;//性别上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)(2)双击“添加”按钮,为其添加消息响应函数:#include"StuInfoDlg.h"//CStuInfoDlg类的头文件voidCex07_1Dlg::OnBnClickedButtonAdd(){//TODO:在此添加控件通知处理程序代码CStuInfoDlgstuInfoDlg;//创建一个学生信息对话框类对象if(stuInfoDlg.DoModal()!=IDOK)//如果用户没有单击“确定”按钮则直接返回,不执行下面操作上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查){return;}//下面三行代码是获得对话框类对象中的关联变量数据//如果在OnOK()函数中没有调用UpdateData(TRUE);的话将无法获得m_strNum=stuInfoDlg.m_strNum;m_strName=stuInfoDlg.m_strName;m_strSex=stuInfoDlg.m_strSex;m_unitAge=stuInfoDlg.m_unitAge;m_strDept=stuInfoDlg.m_strDept;CDatabasedb;//创建一个数据库类对象上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)if(!db.Open("学生信息数据源"))//利用Open()函数直接连接数据源{MessageBox("连接到数据源失败!");return;}CStringstrSQL;//用于初始化SQL语句strSQL.Format("INSERTINTO学生信息表VALUES('%s','%s','%s',%d,'%s')",m_strNum,m_strName,m_strSex,m_unitAge,m_strDept);上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)//编写将要执行的SQL语句db.ExecuteSQL(strSQL);//执行我们编写好的SQL语句db.Close();//断开与数据源的连接ListStuInfo("SELECT*FROM学生信息表");//列出学生信息表中的所有信息}运行结果如图7-18所示。上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)步骤8“修改”功能的实现。(1)双击“修改”按钮,为其添加消息响应函数:voidCex07_1Dlg::OnBnClickedButtonModify(){//TODO:在此添加控件通知处理程序代码intn=m_listStuInfo.GetSelectionMark();//得到列表视图中选择项的索引if(n==-1)//如果为-1则表示没有选中任何项return;m_strNum=m_listStuInfo.GetItemText(n,0);m_strName=m_listStuInfo.GetItemText(n,1);上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)m_strSex=m_listStuInfo.GetItemText(n,2);m_unitAge=atoi(m_listStuInfo.GetItemText(n,3));m_strDept=m_listStuInfo.GetItemText(n,4);//下面代码实现在视图列表中得到的数据传递给新对话框的关联变量CStuInfoDlgstuInfoDlg;stuInfoDlg.m_strNum=m_strNum;stuInfoDlg.m_strName=m_strName;stuInfoDlg.m_strSex=m_strSex;stuInfoDlg.m_unitAge=m_unitAge;stuInfoDlg.m_strDept=m_strDept;if(stuInfoDlg.DoModal()!=IDOK)return;上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)CStringm_strOldNum=m_strNum;//保存选中的主键列表属性数据m_strNum=stuInfoDlg.m_strNum;m_strName=stuInfoDlg.m_strName;m_strSex=stuInfoDlg.m_strSex;m_unitAge=stuInfoDlg.m_unitAge;m_strDept=stuInfoDlg.m_strDept;CDatabasedb;if(!db.Open(“学生信息数据源”))//直接连接数据源{
上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)MessageBox("连接数据源失败!");return;}//由于需要执行的SQL语句太长,而每次格式化都必须在一行,所以将其分成两段CStringstrSQL="",strTmp;strTmp.Format("UPDATE学生信息表SETStuID='%s',StuName='%s',",m_strNum,m_strName);strSQL+=strTmp;strTmp.Format("StuSex='%s',StuAge=%d,StuDept='%s'上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)WHEREStuID='%s'",m_strSex,m_unitAge,m_strDept,m_strOldNum);strSQL+=strTmp;db.ExecuteSQL(strSQL);//执行编写好的SQL语句db.Close();//断开与数据源的连接ListStuInfo("SELECT*FROM学生信息表");}(2)修改学生张鹏的年龄为21后,运行结果如图7-19所示。上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)步骤9“删除”功能的实现。(1)双击“删除”按钮,为其添加消息响应函数:voidCex07_1Dlg::OnBnClickedButtonDelete(){//TODO:在此添加控件通知处理程序代码intn=m_listStuInfo.GetSelectionMark();//得到列表视图中选择项的索引if(n==-1)//如果为-1则表示没有选中任何项return;m_strNum=m_listStuInfo.GetItemText(n,0);上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)//得到选中项的主键信息CDatabasedb;//创建一个数据库类型对象if(!db.Open(“学生信息数据源”))//直接连接数据源{AfxMessageBox("连接到数据源失败!");return;}//下面实现格式化SQL语句,执行SQL语句,然后断开与数据源连接CStringstrSQL;上一页下一页返回任务一使用ODBC类编写对数据库的操作(增、删、改、查)strSQL.Format("DELETEFROM学生信息表WHEREStuID='%s'",m_str⁃Num);db.ExecuteSQL(strSQL);db.Close();ListStuInfo("SELECT*FROM学生信息表");//列出学生信息表中的所有信息}(2)删除学生刘备的信息后,运行结果如图7-20所示。上一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)知识导读ADO是微软提出的一组用于访问关系型及非关系型数据库的应用程序接口,它采用COM技术,提供了编程语言和统一数据访问方式OLEDB的一个中间层。使用ADO技术,开发人员只需关心数据库的连接,而不用关心数据库是如何实现的。使用ADO不仅可以访问关系型,还可以访问非关系型数据库。ADO技术最主要的优点是易于使用、速度快、占用内存少。使用ODBC技术访问数据库,虽然非常方便,但目前使用ODBC只能访问关系型数据库,对于访问像电子邮件、文本文件、目录结构等数据源类型,ODBC是无能为力的。下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)知识点详解1.ADO的常用对象ADO的常用对象有连接对象、记录集对象和命令对象等。(1)连接对象(ConnectionObject)用来与数据源建立连接、管理事务处理等。它保存诸如指针类型、连接字符串、查询超时、连接超时和默认数据库等连接信息。任何对数据库的操作都需要一个连接对象,只不过有时显式地创建,有时隐式地创建。在大多数应用程序中把一个Connection对象保存为全局级或模块级,这样就不用每次执行一个操作时都去创建这个对象。上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)(2)记录集对象(RecordsetObject)用来操作返回的结果集,一个Recordset对象由记录和列(字段)组成。几乎所有对数据的操作都可以在Recordset对象中完成,例如可以在结果集中添加、删除、修改和移动记录。(3)命令对象(CommandObject)用于执行数据库操作命令,例如执行创建、添加、取回、删除或更新记录等操作。使用Command对象查询数据库并返回Recordset对象,以便获取数据,或进行更新、删除等操作。上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)2.使用ADO技术开发数据库应用程序有两种方法(1)在应用程序中使用ActiveX控件,这种方法可以最大限度地简化应用程序对数据库的访问,但这种方法的效率比较低,开发者对程序的控制相对比较弱,所以不能完全发挥ADO访问数据库的优点。(2)使用VisualC++中为开发ADO应用程序提供的动态链接库,这种方法效率比较高,而且可以灵活地控制应用程序,其缺点是该方法使用起来比较复杂。虽然使用ADO控件可以开发简单的数据库应用程序,但这种方法增加了很多不必要的开销,而且支持数据绑定的控件数量很少,这些都限制了此技术的使用,所以下面只介绍第二种方法。上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)示例ex07_02:使用ADO类编写一个管理学生信息数据库的程序。【实现步骤】步骤1创建项目并设计界面。(1)创建一个项目名为“ex07_2”的对话框应用程序,并为其添加相应的控件。设置列表视图属性View为Report类型,如图7-21所示。(2)控件ID和Caption的设置情况见表7-1。(3)在资源视图中插入一个新的对话框,利用这个对话框实现数据的添加和修改操作。首先设置其Caption为“添加修改学生信息”,ID为IDD_DIALOG_STUINFO,然后为其添加相应的控件,如图7-11所示。上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)(4)双击“添加修改学生信息”对话框界面,为其关联对话框类CStuInfoDlg,如图7-12所示。(5)控件ID和Caption的设置情况见表7-2。(6)编辑框关联变量见表7-3。步骤2布局列表控件。为列表框关联一个名为m_listStuInfo的CListCtrl变量。在Cex07_2Dlg::OnInitDialog()函数中添加对话框初始化代码,完成视图列表框控件的布局。代码如下:BOOLCex07_2Dlg::OnInitDialog()上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查){//TODO:在此添加额外的初始化代码m_listStuInfo.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSE⁃LECT);//设置列表视图为网格类型且全选状态上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)m_listStuInfo.InsertColumn(0,"学号",LVCFMT_CENTER,80);m_listStuInfo.InsertColumn(1,"姓名",LVCFMT_CENTER,80);m_listStuInfo.InsertColumn(2,"性别",LVCFMT_CENTER,60);m_listStuInfo.InsertColumn(3,"年龄",LVCFMT_CENTER,60);m_listStuInfo.InsertColumn(4,"系别",LVCFMT_CENTER,120);returnTRUE;
//除非将焦点设置到控件,否则返回TRUE}步骤3编写显示学生信息函数。为了能够便捷地显示数据库数据,需要为Cex07_2Dlg类编写一个显示学生信息的函数ListStuInfo(),完成数据的显示任务。上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)(1)引入ADO数据库。在stdafx.h中添加如下代码:#import"C:\ProgramFiles\CommonFiles\System\ado\msado15.dll"no_namespacerename("EOF","adoEOF")(2)在ex07_2Dlg.h中声明函数:public:voidListStuInfo(CStringstrSQL);上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)(3)把“学生信息数据库.accdb”放入“ex07_2\ex07_2”路径下,然后在ex07-2Dlg.cpp文件中为函数ListStuInfo()添加代码如下:voidCex07_2Dlg::ListStuInfo(CStringstrSQL){m_listStuInfo.DeleteAllItems();//首先清空列表视图中的所有数据_ConnectionPtrm_pConnection;//创建连接对象指针m_pConnection.CreateInstance(__uuidof(Connection));//创建连接对象实例//在ADO操作中建议语句中要常用try...catch()来捕获错误信息上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)Try{//打开本地Access学生信息数据库.accdbm_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;DataSource=学生信息数据库.accdb","","",adModeUnknown);}catch(_com_errore){AfxMessageBox(“数据库连接失败,确认数据库”学生信息数据库accdb“是否在当前路径下!");上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)return;}_RecordsetPtrm_pRecordset;//创建记录集对象指针m_pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集对象实例Try{m_pRecordset->Open(_variant_t(strSQL),//打开记录集m_pConnection.GetInterfacePtr(),//获取库接库的IDis⁃上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)patch指针adOpenDynamic,//动态光标adLockOptimistic,//乐观锁定方式adCmdText//CommandText是文本命令);}catch(_com_error*e){AfxMessageBox(e->ErrorMessage());上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)}_variant_tvar;CStringstrTmp;for(inti=0;!m_pRecordset->adoEOF;i++)//判断是否到达记录集末尾{var=m_pRecordset->GetCollect("StuID");//获取StudentID字段的值strTmp=(LPCSTR)_bstr_t(var);m_listStuInfo.InsertItem(i,strTmp);var=m_pRecordset->GetCollect(“StuName”);//获取StuName字段的值上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)strTmp=(LPCSTR)_bstr_t(var);m_listStuInfo.SetItemText(i,1,strTmp);var=m_pRecordset->GetCollect("StuSex");strTmp=(LPCSTR)_bstr_t(var);m_listStuInfo.SetItemText(i,2,strTmp);var=m_pRecordset->GetCollect("StuAge");//获取StuAge字段的值strTmp=(LPCSTR)_bstr_t(var);m_listStuInfo.SetItemText(i,3,strTmp);var=m_pRecordset->GetCollect("StuDept");//获取StuDept字段的值上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)strTmp=(LPCSTR)_bstr_t(var);m_listStuInfo.SetItemText(i,4,strTmp);m_pRecordset->MoveNext();//记录集指针移动到下一条记录}m_pRecordset->Close();//关闭记录集m_pRecordset.Release();//释放记录集对象m_pRecordset=NULL;if(m_pConnection->State)m_pConnection->Close();//关闭与数据库的连接m_pConnection=NULL;UpdateData(FALSE);}上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)(3)在Cex07_2Dlg::OnInitDialog()函数中的布局代码段下添加:AfxOleInit();//初始化OLE/COM库环境ListStuInfo(“select*from学生信息表”);//显示学生信息运行结果如图7-22所示。步骤4“添加”功能的实现。(1)在ex07_2Dlg.h中添加成员变量:public:CStringm_strName;//姓名CStringm_strNum;//学号UINTm_unitAge;//年龄CStringm_strDept;//系别上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)CStringm_strSex;//性别(2)双击“添加”按钮,为其添加消息响应函数:#include"StuInfoDlg.h"//包含新对话框类的头文件voidCAdoTestDlg::OnButtonAdd(){//TODO:Addyourcontrolnotificationhandlercodehere_ConnectionPtrm_pConnection;//创建连接对象指针m_pConnection.CreateInstance(__uuidof(Connection));//创建连接对象实例Try上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查){m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;DataSource=学生信息数据库.accdb","","",adModeUnknown);}catch(_com_errore){MessageBox("数据库连接失败,确认数据库"学生信息数据库.accdb"是否在当前路径下!");return;上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)}_RecordsetPtrm_pRecordset;//创建记录集指针m_pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集对象实例Try{m_pRecordset->Open(//打开记录集对象"SELECT*FROM学生信息表",//执行的SQL语句m_pConnection.GetInterfacePtr(),//获取库接库的IdispadOpenDynamic,//动态光标adLockOptimistic,//乐观锁定方式上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)adCmdText//CommandText是文本命令);}catch(_com_error*e){AfxMessageBox(e->ErrorMessage());}CStuInfoDlgdlg;if(dlg.DoModal()!=IDOK)//如果用户没有单击“确定”按钮则直接返回,不执行下面操作{return;上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)}//下面五行代码是获得对话框类对象中的关联变量数据//如果在OnOK()函数中没有调用UpdateData(TRUE);的话将无法获得m_strNum=dlg.m_strNum;m_strName=dlg.m_strName;m_strSex=dlg.m_strSex;m_uintAge=dlg.m_uintAge;m_strDept=dlg.m_strDept;CStringstrTmp;strTmp.Format(“%d”,m_uintAge);//将年龄转换为字符串类型上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)m_pRecordset->AddNew();//添加新记录m_pRecordset->PutCollect("StuID",_variant_t(m_strNum));//设置StudentID字段的值m_pRecordset->PutCollect("StuName",_variant_t(m_strName));m_pRecordset->PutCollect("StuSex",_variant_t(m_strSex));m_pRecordset->PutCollect("StuAge",_variant_t(strTmp));m_pRecordset->PutCollect("StuDept",_variant_t(m_strDept));m_pRecordset->Update();//更新记录集m_pRecordset->Close();//关闭记录集对象m_pRecordset=NULL;if(m_pConnection->State)上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)m_pConnection->Close();//关闭连接对象m_pConnection=NULL;ListStuInfo("select*from学生信息表");//列出学生信息表中的所有信息}添加学生信息后,运行结果如图7-23所示。步骤5实现“修改”功能。双击“修改”按钮,为其添加消息响应函数:voidCex07_2Dlg::OnBnClickedButtonModify(){//TODO:在此添加控件通知处理程序代码intn=m_listStuInfo.GetSelectionMark();上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)//得到列表视图中选择项的索引if(n==-1)//如果为-1则表示没有选中任何项return;m_strNum=m_listStuInfo.GetItemText(n,0);m_strName=m_listStuInfo.GetItemText(n,1);m_strSex=m_listStuInfo.GetItemText(n,2);m_strDept=m_listStuInfo.GetItemText(n,4);m_unitAge=atoi(m_listStuInfo.GetItemText(n,3));//因为年龄参数为整型所以等到年龄信息后需要调用atoi()函数将其转换为整型//下面代码实现在视图列表中得到的数据传递给新对话框的关联变量上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)CStuInfoDlgdlg;dlg.m_strNum=m_strNum;dlg.m_strName=m_strName;dlg.m_strSex=m_strSex;dlg.m_unitAge=m_unitAge;dlg.m_strDept=m_strDept;if(dlg.DoModal()!=IDOK)//如果用户没有单击确定按钮则不执行下面操作return;CStringm_oldStrNum=m_strNum;//保存选中的主键列表属性数据上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)m_strNum=dlg.m_strNum;m_strName=dlg.m_strName;m_strSex=dlg.m_strSex;m_unitAge=dlg.m_unitAge;m_strDept=dlg.m_strDept;_ConnectionPtrm_pConnection;//创建连接对象指针m_pConnection.CreateInstance(__uuidof(Connection));//创建连接对象实例Try{m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)Source=学生信息数据库.accdb","","",adModeUnknown);}catch(_com_errore){MessageBox(“数据库连接失败,确认数据库“学生信息数据库..accdb”是否在当前路径下!");return;}_variant_tm_pRecordset;CStringstrSQL="",strTmp;//构造SQL语句上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)//由于需要执行的SQL语句太长,而每次格式化都必须在一行,所以将其分成两段strTmp.Format("update学生信息表setStuID='%s',StuName='%s',",m_strNum,m_strName,m_strSex);strSQL+=strTmp;strTmp.Format("StuAge=%d,StuDept='%s'whereStuID='%s'",m_unitAge,m_strDept,m_oldStrNum);strSQL+=strTmp;try上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查){m_pConnection->CursorLocation=adUseClient;//直接利用连接对象执行SQL语句m_pConnection->Execute(_bstr_t(strSQL),&m_pRecordset,adExe⁃cuteNoRecords);}catch(_com_error*e){MessageBox(e->ErrorMessage());return;}上一页下一页返回任务二使用ADO类编写对数据库的
操作(增、删、改、查)if(m_pConnection->State)m_pConnection->Close();//关闭连接对象m_pCon
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Human-thrombospondin-生命科学试剂-MCE
- 2025年中国组合式FRP阀门保温防护罩市场调查研究报告
- 2025年中国管路附件市场调查研究报告
- 中等职业学校学生学业水平考试商务营销类专业基本技能考试指导性实施方案
- 2025年中国电梯楼层字符指示器市场调查研究报告
- 2025年中国工艺用油市场调查研究报告
- 2026年广西钦州市浦北县校高三下学期3月阶段性检测试题化学试题含解析
- 四川省成都九校2026届第二学期高三期中考试化学试题含解析
- 2026一年级下册语文珍惜时间教育课件
- 2026一年级下册语文一A一B式词语课件
- 2025年上海市中考语文备考之文学常识汇编
- 渣土外运施工方案(3篇)
- 新型储能项目定额(锂离子电池储能电站分册) 第二册 安装工程
- 插花艺术知到智慧树期末考试答案题库2025年北华大学
- 【MOOC答案】《光纤光学》(华中科技大学)章节作业期末慕课答案
- 2025年二级风力发电运维值班员职业技能鉴定考试题库(浓缩500题)
- 中国海军军舰课件
- 销售员安全试题及答案
- 血液透析不同抗凝剂的应用及护理
- 高压电危险及安全防护课件
- 语文教师书写《识字写字教学》教育教研讲座教学培训课件
评论
0/150
提交评论