




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC与数据库编程实验参考数据库访问控件: 使用控件访问数据库是一种比较简单的访问数据库的方法,因为控件中已经完成了访问数据库的功能,而且有比较友好的用户界面,只需要简单配置就可以使用。在使用Visual Basic开发数据库应用程序的时候,会经常使用数据库访问控件。常用的数据库访问控件包括: ADO Data控件 DataList控件/DataCombo控件 DataGrid控件下面对这些控件的主要功能用使用方法进行介绍。ADO Data控件 ADO Data 控件是使用ADO技术访问数据库的具体实现,可以通过以下几点了解ADO Data控件的基本情况。 可以使用ADO Data控件快速地创建一个到数据库的连接; ADO Data控件使用Recordset对象提供对存储在数据库中数据的访问,并允许从一个记录移动到另一个记录,显示和操纵记录数据。 ADO Data控件可以执行大部分数据库访问操作,但是它并不能够显示数据库中数据的内容,ADO Data控件通常需要与其他控件结合使用。这些与ADO Data控件结合使用的控件,可以称之为“数据觉察控件”。常用的数据觉察控件包括DataList控件、DataCombo控件和DataGrid控件等。当ADO Data控件中当前记录发生变化时,数据觉察控件的内容也会随之发生变化。本节将通过一个实例介绍ADO Data控件的注册和使用方法。利用VC创建一个基于对话框的工程,工程名为ADOData。在默认情况下,ADO Data控件并不出现在Visual C+的控件工具栏中,需要用户手动将其添加到工程中。可以使用下面的方法将ADO Data控件添加到工程中。在系统菜单中选择“Project”/”Add to Project”/”Components and Controls”,打开”Components and Controls Gallery”对话框,如图9.1所示。图9.1 “Components and Comtrols Gallery”对话框双击”Registered ActiveX Controls”目录,可以看到已经注册的ActiveX控件,如图9.2所示。图9.2 选择ADO Data控件双击”Microsoft ADO Data Control,version 6.0(OLEDB)”,将会弹出如图9.3所示的提示对话框,询问用户是否插入控件。图9.3 提示是否插入控件单击“确定”按钮,打开”Confirm Classes”窗口,如图9.4所示图9.4 打开”Confirm Classes”窗口为了使用户能够在工程中ADO Data中控件,系统将在工程中自动添加7个类包括Cadodc、Cfields、ColeFont、Cproperties、Cproperty和C_Recordset。其中C_Recordset是记录集类,Cfields是字段组类,Cfield字段类,它们是ADO Data控件中比较常用的类。单击”OK”,返回如图9.2所示的对话框,再单击”Close”,关闭窗口呵以看到,在控件工具栏中新增了一个按钮,这就是ADO Data控件,如图9.5所示。 图9.5在控件工具栏中的ADO Data控件按钮ADO Data控件的常用属性及说明如下: BOF如果当前记录位于Recordset对象的第一个记录之前,则BOF等于true,否则BOF等于false。 ConnectionString指定连接字符串,用于建立到数据源的连接。 ConnectionTimeout指定连接数据库的等待时间,如果超过此时间还没有连接到数据库,则产生一个错误。 EOF如果当前记录位于Recordset对象的第一个记录之后,则EOF等于true,否则EOF等于false。通常用BOF和EOF属性判断记录集的当前游标位置是否存在有效数据。 MaxRecords返回Recordset对象中记录的数量。 Mode指定对数据尖的访问权限。AdModeUnknown是默认值,表明权限尚未设置或无法确定;AdModeRead表明权限为只读;AdModeWrite表明权限为只写;AdModeReadWrite表明权限为读/写;AdModeShareDenyRead防止其他用户使用读权限打开连接;AdModeShareDenywrite防止其他用户使用写权限打开连接;AdModeShareExclusive防止其他用户打开连接;AdModeShareDenyNone防止其他用户使用使用任何权限打开连接。 Password设置连接到数据源时指定用户的口令。 RecordSource设置一个数据记录源,可以是表、视图或SELECT语句等。查询结果保存在Recordset属性中。UserName 设置连接到数据源的用户。工程默认创建的对话框为IDD_ADODATA_DIALOG,在控件工具栏中选中ADO Data控件,将其添加到对话框IDD_ADODATA_DIALOG中。右键单击ADO Data控件,打开控件属性窗口如图9.6所示。图9.6 设置ADO Data控件的属性可以看到,默认的控件ID为IDC_ADODC1。通常ADO Data控件是不可见的,所以要取消Visible属性的选择。单击“通用”选项卡,可以设置连接属性,如图9.7所示。图9.7 设置连接属性可以通过ODBC数据源连接到数据库,创建ODBC数据源的方法可以通过控制面板进行。如果读者不希望在安装程序的客户端都配置ODBC数据源,可以选择“使用连接字符串”。单击“生成”,打开“数据链接属性”窗口,如图9.8所示。图9.8 “数据链接属性”窗口选择”Microsoft OLE DB Provide for SQL Server”,单击“下一步”,打开“连接”页面,如图9.9所示。图9.9“连接”界面选择SQL Server数据库服务器的名称,本例中为NTSERVER,用户可以根据自己的实际情况选择;输入登录服务器的信息,可以使用sa用户登录;在数据库列表中选择要连接的数据库。配置完成后,单击“测试连接”,如果连接成功,可以看到一个“测试连接成功”的消息框。单击“确定”,完成设置。在ADO Data控件的属性窗口中,单击“身份认证”选项卡,如图9.10所示。图9.10 设置“身份验证”信息单击“记录源”选项卡,在“命令类型”组合框中选择“2-adCmdTable”,然后在“表或存储过程名称”组合框中选择“Employees”,如图9.11所示。图9.11 设置记录源此时运行程序,还无法看到效果,因为ADO Data控件只起到连接数据源的作用还需要借助其他控件显示数据。此功能将在下一小节介绍。DataGrid控件 DataGrid控件以表格形式显示结果集中的数据,它需要ADO Data控件提供数据源。在默认情况下,DataGrid控件并没有出现在Visual C+的控件工具栏中,参照前面说过的方法将其添加到工程ADOData中,在“registered ActiveX Controls”目录下双击”Microsoft DataGrid Control,Version 6.0(OLEDB)”,如图9.12所示。图9.12 添加DataGrid控件 双击”Microsoft DataGrid Control,Version 6.0(OLEDB)”,在弹出的对话框中单击“确定”,打开”Confirm Classess”窗口,如图9.13所示。图9.13 “Confirm Classes”窗口为了使用户能够在工程中使用DataGrid控件,系统将在工程中自动添加10个类,包括CDataGrid、CColumns、Cspliit、CDataFormatDisp、CStdDataFormatsDisp、CColumn和CSplits、COleFont、CSetBookmarks和CPicture等。单击“OK”,返回如图9.12所示的对话框,再单击“Close”关闭窗口。可以看到,在控件工具栏中新增了一个按钮,这就是DataGrid控件,如图9.14所示。 图9.14 在控件工具栏中的DataGrid控件按钮在控件控件栏中DataGrid控件,在对话框IDD_ADOATA_DIALOG中拉动鼠标,添加DataGrid控件,界面如图9.15所示。 图9.15 在对话框中添加DataGrid控件右键单击DataGrid控件,在弹出的菜单中选择“Properties”,打开属性窗口。单击“All”选项卡,可以查看和设置DataGrid控件的所有属性,如图9.16所示。图9.16 设置DataGrid控件的所有属性在DataSource属性中,选择IDC_ADODC1,表示DataGrid控件接受ADO Data控件结果信中的数据。将Caption属性设置为“员工信息”,然后关闭窗口。运行工程,界面如图9.17所示。图9.17 工程ADOData 的运行界面可以看到,表Employees中所有列的内容,按照上面的方法无法选择输出列: 显示了表Employees中所有列的内容,按照上面的方法无法选择输出列; 没有设置表格中各列的宽度。首先解决第一个问题,有选择地显示表Employees中的内容。打开ADD Data控件的属性窗口,单击“记录源”选项卡,在“命令类型”组合框中选择“1-adCmdText”,在“命令文本(SQL)”编辑框中输入下面的命令:SELECT * FROM Employees这里并没有指定具体的输出列,因为这项工作将稍后在程序中完成。为了能够在程序中操作ADO Data和DataGrid控件,需要将它们连接到成员变量。打开ClassWizard窗口,单击“Member Variables”选项卡,设置ADO Data控件对应的成员变量为m_adodc,类型为CAdodc;设置DataGrid控件对应的成员变量为m_datagrid,类型为CDatagrid,如图9.18所示。图9.18 设置成员变量可以在对话框IDD_ADODATA_DIALOG初始化时设置SELECT语句,约定在表格中显示的内容。打开ClassWizard窗口,单击”Messages Map”选项卡。在“Object Ids”列表框中选择CADODataDlg,在“Messages”列表框中选择WM_INITDALOG,添加成员函数CADODataDlg:OnInitDialog(),此函数在装载对话框时将被调用。在此函数中添加如下代码:m_adodc.SetRecordSource(“SELECT Emp_id,Emp_name As 员工姓名,Sex As 性别,Title As 职务,Wage As 工资 FROM Employees”);m_adodc.Refresh(); 下面介绍如何在程序中设置DataGrid控件中各列的宽度。为了设置列宽度,需要使用类CColumn和类CColumns,请在ADODataDlg.cpp中添加下面的代码:#include”column.h”#include”columns.h”这样就可以在ADODataDlg.cpp中访问类CColumn和类CColumns了。使用期CDataGrid:GetColumns()函数可以返回相应的CColumns对象。CColumns:GetItem(const VARIANT& Index)函数可以返回指定列(通过参数Index)对应的CColumn对象。读者可以在类窗口中选择相应的类查看成员函数的具体代码。_variant_t类是在此COMDEF.H中定义的,为了在程序中使用_variant_t类,请在ADODataDlg.cpp中添加下面的代码:#include “COMDEF.H”现在可以在程序中设置列宽度了。在CADODataDlg:OnInitDialog()函数中添加如下代码:_variant_t vIndex;vIndex=long(0);m_datagrid.GetColumns().GetItem(vIndex).SetWidth(0);vIndex=long(1);m_datagrid.GetColumns().GetItem(vIndex).SetWidth(80);vIndex=long(2);m_datagrid.GetColumns().GetItem(vIndex).SetWidth(40);vIndex=long(3);m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100);vIndex=long(4);m_datagrid.GetColumns().GetItem(vIndex).SetWidth(90);程序中使用期long(n)的方法将整数转换为_variant_t类型的,从而可以在Ccolumns:GetItem()函数中使用。设置列宽度的过程如下: 使用CDataGrid对象的GetColumns()函数返回CColumns对象; 再使用CColumns对象的GetItem()函数返回CColumn对象,此时已经确定了表格中具体的一列; 再使用CColumn:SetWidth()函数设置列的宽度。运行工程,界面如图9.19所示。图9.19设置列宽度后的工程界面在程序实现过程中,经常需要从DataGrid控件的当前行中读取数据。为了实现此功能,需要在CDataGrid类中添加一个成员函数GetItem(),代码如下:CString CDataGrid:GetItem(int ColNum) CColumns cols=GetColumns(); VARIANT v_ColNum,v_Value; /设置列编号 v_ColNum.vt=VT_I2; v_ColNum.iVal=ColNum; /根据列编号返回CColumn对象CColumn col=cols.GetItem(v_ColNum); /读取列的v_Value=colGetValue(); return v_Value.bstrVal;这段代码将添加到datagrid.cpp中,参数ColNum表示要读取列的编号,编号从开始。程序首先调用GetColumns()函数,返回当前CDataGrid对象对应的CColumns对象;然后再调用CColumns:GetItem()函数返回指定列对应的Column对象;最后调用其所长CColumn:GetValue()函数返回当前列的值。因为在CDataGrid:GetItem()函数中需要访问期间CColumn类,所以需要在datagrid.cpp中添加如下代码:#include “Column.h”在Visual C+ 类中添加一个成员函数,需要在.h文件中声明函数,然后在.cpp文件中定义函数的具体代码。请在datagrid.h中添加如下代码:Cstring GetItem(int ColNum);下面测试如何使用GetItem()函数从DataGrid控件中读取数据。编写程序,当用户双击DataGrid控件时,将弹出对话框显示当前记录的数据。打开工ClassWizard窗口,单击“messages Map”选项卡,在“Class name”组合框中 选择CADODataDlg,在“Object IDs”组合框中选择IDC_DATAGRID1,在“Messages”列表框中选择DblClick,然后单击”Add Function“按钮,添加CADODataDlg:OnDblClickDatagrid1()函数。CADODataDlg:OnDblickDatagrid1()函数的代码如下:void CADODataDlg:OnDblClickDatagrid1() /TODO:Add your control notification handler code hereif(m_adodc.GetRecordset().GetEof()=1) MessageBox(“没有数据”); return;CString sRecord;sRecord=”员工编号:”+m_datagrid.GetItem(0)+”n”;sRecord+=”员工姓名:”+m_datagrid.GetItem(1)+”n”;sRecord+=”性别:”+m_datagrid.GetItem(2)+”n”;sRecord+=”职务:”+m_datagrid.GetItem(3)+”n”;sRecord+=”工资:”+m_datagrid.GetItem(4)+”n”;MessageBox(sRecord);程序首先判断当前的记录集是否存在数据。GetRecordset()函数可以返回CAdodc对象包含的CRecordset对象,如果GetEof()函数返回,则表示没有当前数据。CDataGrid:GetItem()函数的代码在前面已经介绍了,调用它可以返回指定列的数据。运行程序,双击DataGrid控件中的一条记录,将弹出如图9.20所示的消息框。图9.20从DataGrid控件中读取数据DataList控件和DataCombo控件DataList 控件是数据绑定列表框,它需要指定一个ADO Data数据源,并使用数据源中的一个字段填充DataCombo控件是数据绑定组合框,它的功能与DataList控件完全相同。本节将通过一个实例介绍DataList 控件和DataCombo控件的注册和和使用方法。创建一个基于对话框的工程,工程名为ListCombo。在默认情况下,DataList控件和DataCombo控件并没有出现在Visual C+的控件工具栏中,可以参照前面说过的方法将其添加到工程ADOData中,在”Registered ActiveX Controls”目录下选择“Microsoft DataComboControl,version 6.0(OLEDB)”,如图9.21所示。图9.21 添加DataCombo控件双击”Microsoft DataCombo Control,version 6.0(OLEDB)”,在弹出的对话框中单击“确定”按钮,打开”Confirm Classes”窗口,如图9.22所示。图9.22 “ Confirm Classes”窗口为了使用户能够在工程中使用DataCombo控件,系统将在工程中自动添加个类,包括CDataCobo、COleFont和CPicture等。单击“K”,返回如图9.20所示的对话框,再单击”Close”,关闭窗口呵以看到,在控件工具栏中新增了一个按钮,这就是DataCombo控件,如图9.23所示。图9.23 在控件工具栏中的DataCombo控件按钮重复上面的过程,在“RegisteredActiveX Controls”目录下双击“icrosfot DataList Contol,version 6.0(OLEDB)”,在弹出的对话框中单击“确定”,打开“Confirm Classes”窗口,如图9.24所示。图9.24“Confirm Classes”窗口为了使用户能够在工程中使用DataList控件,系统将在工程中自动添加个类,包括CDataList、COleFont和CPicture等。单击“OK”,返回如图9.24所示的对话框,再单击“Close”,关闭窗口,在控件工具栏中新增了一个按钮,这就是DataCombo 控件,如图9.25所示。图9.25在控件工具栏中的DataList控件按钮因为ADO Combo控件和ADO List控件都需要从ADO Data控件中获得记录集,所以需要将ADO Data 控件添加到工程中。工程ListCombo的主要对话框为IDD_LISTCOMBO_DIALOG,将其中默认的控件删除,并参照表达式9.1向对话框中添加控件。表9.1 设置设置对话框IDD_LISTCOMBO_DIALOG中控件的属性控件类型属性属性值静态文本IDC_STATIC1部门名称静态文本IDC_STATIC2员工列表ADO DataIDIDC_ADODC1Visible取消选择ConnectionString(可以单击“通用”选项卡设置)Provider=SQLOLEDB.1,Persist Security Info=False;User ID=sa;Initial Catalog=HrMan;Data Source=NTSERVERUserNamesaPassword(根据实际情况设置)CommandType2-Table CommandTypeRecordSourceDepartmentsADO DataIDIDC_ADODC2Visible取消选择ConnectionString(可以单击“通用”选项卡设置)Provider=SQLOLEDB.1,Persist Security Info=False;User ID=sa;Initial Catalog=HrMan;Data Source=NTSERVERUserNamesaPassword(根据实际情况设置)CommandType1-Text CommandTypeRecordSourceSELECT * FROM EmployeesDataComboIDIDC_DATACOMBO1RowSourceIDC_ADODC1ListFieldDep_nameBoundColumnDep_idDataComboIDIDC_DATALIST2RowSourceIDC_ADODC2ListFieldDep_nameBoundColumnDep_idDataList控件和DataCombo控件的常用属性如下:BoundColumn返回或设置绑定数据源中的一个源字段名称,此字段的值会随着DataList控件或者说DataCombo控件中当前值的变化而变化。本例中,DataCombo控件IDC_DATACOMBO1的BoundColumn为Dep_id,当用户选择一个部门时,BoundColumn属性将等于此部门的编号。BoundText返回或设置由BoundColumn属性指定的字段的值。可以把它看成是DataList控件或DataCombo控件当前值变化后的输出值。ListField返回或设置Recordset对象中的字段名,这个对象由RowSource属性指定,用于填充DataCombo控件或DataList控件的列表部分。 RowSource设置一个指定ADO Data控件的值,DataList控件的值,DataCombo控件的列表由这个ADO Data控件填充。SelectedItem返回DataCombo控件或DataList控件中选中记录的值。为了能够在程序中操作ADO Data、DataCombo和DataList控件,需要将它们连接到成员变量。打开ClassWizard窗口,单击“Member Variables”选项卡,参照表9.2设置成员变量。.表9.2为控件设置成员变量控件ID变量类型成员变量名IDC_ADODC2Control/CAdodcm_adodc2IDC_DATACOMBO1Control/CDataCombom_datacomboIDC_DATALIST2Control/CDataListm_datalist排列控件的位置,使对话框的界面如图9.26所示。图9.26 对话框IDD_LISTCOMBO_DIALOG的界面当“部门名称”组合框IDC_DATACOMBO1的内容发生变化时,将发送Change消息,对应的函数为CListComboDlg:OnChangeDataCombo1()。在ClassWizard窗口,选择编辑此函数,代码如下:void CListComboDlg:OnChangeDatacombo1() / TODO: Add your control notification handler code hereCString vDepId = ;CString vSql = SELECT * FROM Employees;/从组合框中返回部门编号vDepId = m_datacombo.GetBoundText();if (vDepId != ) vSql = vSql + WHERE Dep_Id = + vDepId;/设置员工列表的数据源m_adodc2.SetRecordSource(vSql);m_adodc2.Refresh();当组合框的内容发生变化时,程序将调用m_datacombo.GetBoundText()函数取得当前选择的部门编号,然后根据此编号生成SELECT语句。因为m_adodc2变量为DataList控件提供结果集,所以使用生成的SELECT语句设置m_adodc2 的数据源,从而刷新DataList控件的内容。运行工程,界面如图9.27所示。图9.27 工程ComboList的运行界面使用ADO访问数据库Visual C+是一种面向对象的可视化编程工具,它提供了多种访问数据库的工具和方法因此被越来越多地用作大型公司数据库和客户机/服务器应用程序的前端开发工具。在此Visual C+中,可以通过发下方式访问数据库: ActiveX数据对象(ADO) 远程数据对象(RDO) 数据访问对象(DAO) ODBC直接连接到数据库其中ADO是最新的数据库访问技术。它是使用更加简单,更加灵活的对象模型。对于新工程,应该使用ADO作为数据访问接口。ADO数据模型在介绍ADO访问数据库的具体方法之前,必须先了解一下DAO数据模型。ADO提供如下访问数据库的方法: 连接到数据源; 指定访问数据源的命令,同时可带变量参数或优化执行。通常涉及ADO的Command对象; 执行命令,例如一个SELECT脚本; 如果此命令使数据按表中行的形式返回(例如SELECT命令),则将这些行存储在易于检操作或更改的缓存中; 适当情况下,可以缓存行的更改内容写回数据库中,更新数据源; 提供常规方法检测错误(错误通常由建立连接或执行命令造成),涉及ADO的Error对象。为了实现上面的功能,ADO编程模型提供了以下基本元素:连接通过“连接”可以从应用程序中访问数据源。连接时必须指定要连接到的数据源以及连接所使用的用户名和口令等信息。对象模型使用Connection对象完成连接功能。命令可以难过已建立的连接发出命令,从而对数据源进行指定的操作。一般情况下,命令可以在数据源中清添加、修改或删除数据,也可以检索数据。对象模型用Command对象来体现命令的概念。参数 在执行命令时可以指定参数,参数可以在命令发布之前进行更改。例如,可以重复发出相同的数据检索命令但是每一次指定的检索条件不同。对象模型用Parameter对象来体现参数概念。记录集查询命令可以将查询结果存储在本地,这些数据以“行”(记录)为单位,返回数据的集合被称为记录集。对象模型将该存储体现为Recordset对象。字段一个记录集行包含一个或多个字段。如果将记录集看作二维网格,字段将排列构成列。每一字段(列)都分别包含有名称、数据类型和值的属性,值中包含了来自数据源的真实数据。对象模型以Field对象体现字段。要修改数据源中的数据,可在记录集行中修改Field对象的值,对记录集的更改最终被传送给数据源。错误错误随时可在应用程序中发生,通常是由于无法建立连接、执行命令或对某些状态(例如,试图使用没有初始化的记录集)的对象进行操作。对象模型以error对象体现错误。任何发生的错误一个或多个Error对象。属性每个ADO对象都有一组惟一的“属性”来描述或控制对象的行为。属性有内置和动态两种类型。内置属性是ADO对象的一部分并且随时可用。动态属性则由特别的数据提供者添加到ADO对象的属性集合中,仅在提供者被使用时才能存在。对象模型以及Property对象体现属性。集合ADO集合是一种可方便地包含其他特殊类型的对象类型。使用集合方法可按名称(文本字符串)或序号(整型数)对集合中的对象进行检索。ADO提供4种类型的集合: Connection对象具有关Error集合,包含为响应与数据源有关的单一错误而创建的所有Error对象。 Command对象具有Parrmeters集合,包含应用于Command对象的所有Parameter对象。 Recordset对象具有Fields集合,包含Recordset对象中所有列的Field对象。 此外,Connection、Command、Recordset和Field对象都具有Properties集合,它包含各个对象的Property对象。下面分别对ADO数据模型中的常用对象进行介绍。Connection对象Connection对象代表与数据源的连接。如果是客户端/服务器数据库系统,该对象可以等价于到服务器的实际网络连接。Connection对象的层次结构如图9.28所示。ConnectionErrorsCommandRecordset图9.28Connetion对象的层次结构在访问数据库时,首先需要创建一个Connection对象,通过它建立到数据库的连接。Connection对象的常用属性及方法如下:ConnectionString属性ConnectionString是连接字符串,指定用于建立连接数据源的信息。ConnectionTimeout属性ConnectionTimeout属性指示在终止尝试和产生错误之前执行命令需等待的时间,默认值为30s。Mode属性Mode属性指定Connection对象修改数据的权限。Mode属性的值如表9.3所示。表9.3 Mode属性的值常量说明adModeUnknown默认值。表明权限尚未设置或无法确定adModeRead表明权限为只读adModeWrite表明权限为只写adModeReadWrite表明权限为读/写adModeShareDenyRead防止其他用户使用读权限打开连接adModeShareDenyWrite防止其他用户使用写权限打开连接adModeShareExclusive防止其他用户打开连接adModeSharedenyNone防止其他用户使用任何权限打开连接Open方法Open方法用于打开到数据源的连接。Open方法的语法结构如下:conncetion.Open ConnectionString,UserID,Password,Options其中ConnectionString是连接字符串, UserID是访问数据库的用户名,Password是密码,Options是连接选项。如果ConnectionStringk中包含了用户名和密码等信息,则相应的参数可以省略。如果设置了Connection对象的ConnectionString属性,Open方法就不需要设置参数了。Close方法Close方法用于关闭到数据源的连接。访问数据库完成后,为了节省资源,通常需要将数据库连接关闭。Command对象Command对象定义了将对数据源执行的命令。 Command对象的层次结构如图9.29所示。 ConnectionCommandParameters 图9.29 Command对象的层次结构Command对象的常用属性和方法如下:ActiveConnection属性通过设置ActiveConnection属性使打开的连接与Command对象关联。CommandText属性定义命令(例如SQL语句)的可执行文本。Execute方法执行在CommandText属性中指定的查询、SQL语句或存储过程。如果说CommandText属性指定按行返回查询,执行所产生的结果将存储在新的Recordset对象中。如果该命令不是按行返回查询,则返回关闭的Recordset对象。Recordset对象Recordset 对象表示来自基本表或命令执行结果的记录全集。使用ADO时,通过Recordset对象可对几乎所有数据进行操作。所有Recordset对象均使用记录(行)和字段(列)进行构造。Recordset对象的层次结构如图9.30所示。ConnectionRecordsetFields图9.30 Recordset对象的层次结构Recordset对象的常用属性和方法如下:ActiveConnection属性通过设置ActiveConnection属性使打开的连接与Command对象关联。AbsolutePosition属性指定Recordset对象当前记录的序号位置。BOF、EOF属性BOF指示当前记录位置位于Recordset对象的第一个记录之前。EOF指示当前记录位置位于Recordset对象的最后一个记录之后。这两个属性经常被用来判断记录指针是否越界。BOF或EOF为真时,不能从结果集中读取数据,否则会产生错误。MaxRecord属性指定通过查询返回 Recordset的记录的最在数目。例如只需要返回前10条记录时,可以将MaxRecord属性设置为10。RecordCount属性返回Recordset对象中记录的当前数目。Move方法在记录集中移动指针。MoveFirst、MoveLast、MoveNext和平MovePrevious方法在指定的Recordset对象中移动到第一个、最后一个、下一个或前一个记录并使该记录成为当前记录。Open方法使用Open方法可打开代表基本表、查询结果或者以前保存的Recordset中记录的游标。Open方法的语法如下:recordset.Open Source,ActiveConnection,CursorType,OptionsSource是记录源,它可以是一条SQL语句、一个表或一个存储过程等。ActiveConnection指定相应的Connection对象。CursorType指定打开Recordset时使用的游标类型它的值如表9.4所示。LockType指定打开Recordset时应该使用的锁定类型。Options指定Source参数的类型,常用Options属性值如表9.5所示。以上参数均为可选参数。表9.4 Cursor属性的值常量说明adOpenForwardOnly(默认值)打开仅向前类型游标adOpenKeyset打开键集类型游标adOpenDynamic打开动态类型游标adOpenStatic打开静态类型游标表9.5 常用Options属性的值常量说明adCmdtext将Source作为命令的文本定义来计算adCmdTable生成SQL查询从在Source中命名的表中返回所有行adCmdTableDirect直接从在Source中命名的表中返回所有行adCmdStoreProc将Source视为存储过程adCmdUnknownSource参数中的命令类型为未知adCmdFile从在Source中命名的文件中恢复保留(保存的)Recordset其他常用的方法还包括AddNew、Delete和Update等,分别用于添加新记录,删除指定记录和保存对当前记录的更新。因为本实例中都直接使用SQL语句来完成这些功能,所以这里不对它们进行详细的介绍。在Visual C+中使用ADO在默认情况下, Visual C+不支持ADO对象。要在程序中使用对象,需要使用#import命令将ADO库文件导入到工程中,代码如下:#import “c:program FilesCommon FilesSystemadomsado15.dll” no_namespace rename(“EOF”,”adoEOF”) rename(“BOF”,”adoBOF”)支持ADO编程的库文件是msado15.dll,它的默认保存在”c:program filescomom filessystemado”目录下。参数no_namespace表示不使用ADO的名字空间。为了避免出现常量名冲突,将EOF改名为adoEOF,将BOF改名为adoBOF。如果工程比较小,可以将此代码添加到使用ADO的文件中。本书设计并使用专门的连接数据库类ADOConn,其中包含了连接数据库的代码。本节将结合实例介绍如何创建类ADOConn。ADO库包含3个基本接口,即_ConnectionPtr接口_CommandPtr接口和_RecordsetPtr接口。它们分别对应Connection对象、Comman对象和Recordset对象。下面介绍此工程的实现过程。创建一个基于对话框的应用程序,工程名为Ado。在菜单中选择”Insert”/”New Class”,打开新建表对话框。在“Class type”组合框中选择Generic Class,类名为ADOConn,默认的类文件为ADOConn.cpp,如图9.31所示。图9.31 新建类对话框设置完成后,单击“OK”。单击“FileView”选项卡,可以在Source Files目录下看到ADOConn.cpp,在Header Files目录下看到ADOConn.h。打开ADOConn.h文件,在其中添加如下代码:#import “c:Program FilesCommon FilesSystemadomsado15.dll” no_namespace rename(“EOF”,”adoEOF”) rename(“BOF”,”adoBOF”)定义类ADOConn的成员变量和成员函数,代码如下:class ADOConn/定义变量public:/添加一个指向Connection对象的指针:_ConnectionPtr m_pConnection;/添加一个指向Recordset对象的指针:_RecordsetPtr m_pRecordset;/定义方法public: ADOConn();virtual ADOConn(); /初始化一连接数据库void OnInitDBConnect();/执行查询_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);/执行SQL语句,Insert Update _variant_tBOOL ExecuteSQL(_bstr_t bstrSQL);void ExitConnect();在定义类ADOConn时,代码分成两个部分,即定义变量和定义方法。成员变量包括_ConnectionPtr对象和_RecordsetPtr对象,分别用于处理连接数据库和返回查询结果集。成员方法包括下面的内容: OnInitADOConn() 初始化连接数据库; GetRecordSet(_bstr_t bstrSQL) 执行SELECT语句,返回结果集,参数bstrSQL表示要执行的SELECT语句; ExecuteSQL(_bstr_t bstrSQL) 执行SELECT语句外其他SQL语句,使用INSERT语句和UPDATE语句,这些SQL语句不返回结果集; ExitConnect() 断开到数据库的连接。下面介绍这些成员方法的代码实现,它们都保存在ADOConn.cpp中。OnInitADOConn()函数的代码如下:void ADOConn:OnInitADOConn()/ 初始化OLE/COM库环境 :CoInitialize(NULL); try/ 创建Connection对象m_pConnection.CreateInstance(ADODB.Connection);/ 设置连接字符串,必须是BSTR型或者_bstr_t类型_bstr_t strConnect = Provider=SQLOLEDB; Ser
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河流侵蚀地理题库及答案
- 公务员考试试卷及答案
- 2025河南艺术职业学院数艺产学基地招102人考试参考试题及答案解析
- 2025年输血试题及答案
- 2025年哈尔滨市星光小学校招聘教师1人备考练习题库及答案解析
- 2026北京快手科技有限公司校园招聘备考练习试题及答案解析
- 2025年坐姿默写场景题目及答案
- 2025年铲机考试题目及答案
- 2025湖南怀化市辰溪县招聘城镇公益性岗位1人考试参考试题及答案解析
- 2025黑龙江哈尔滨工程大学水声工程学院岗位招聘1人备考练习试题及答案解析
- 工商注册知识培训课件
- 隐患排查治理奖励制度
- 学校食堂清洗消毒工作流程培训测试题及答案
- 金氏五行升降中医方集
- 设施蔬菜生产机械化技术
- LY/T 1821-2009林业地图图式
- JJF 1272-2011阻容法露点湿度计校准规范
- 液压与气压传动 第2版 马振福 高职课件0、1新
- 危化品安全管理学习课件
- SY∕T 7298-2016 陆上石油天然气开采钻井废物处置污染控制技术要求
- 磁敏传感器(品) 课件
评论
0/150
提交评论