现在的位置: 首页 > 综合 > 正文

在VC6.0中使用ADO开发数据库应用程序

2017年12月07日 ⁄ 综合 ⁄ 共 5252字 ⁄ 字号 评论关闭

在VC6.0中使用ADO开发数据库应用程序

使用ADO开发应用程序有两种方法,一种是直接在应用程序中使用ADO数据控件,该方法最简单,无需编写一行代码即可实现对数据库的访问,另一种方
法是直接使用ADO对象实现对数据库的操作,该方法较复杂,但可以让程序员更深入的控制数据库。  
一.使用ActiveX控件建立应用程序  
该方法需要两个ActiveX控件:Microsoft   ADO   Data   Control   ,version  
6.0(OLE   DB)和Microsoft   ADO   DataGrid   Control   ,version  
6.0(OLE   DB)。下面我们就使用这两个控件,建立一个访问SQL   Server   7.0数据库的应用程序,步骤如下:  
1.启动VC6.0,使用MFC   AppWizard建立一个单文档应用程序,命为AdoCtl,在Step1到Step  
5中使用缺设置,直接按Next即可,在Step  
6中,选择视图类的基类为CFormView,然后按Finish,按OK,生成应用程序框架;  

2.在应用程序的ResourceView中,删除IDD_ADOCTL_FORM对话框中自动生成的静态文本,然后在该对话框的编辑窗口中击鼠标右键,
在弹出的快捷菜单中选择Insert   ActiveX   Control...命令;  
3.在接下来的Insert   ActiveX   Control对话框中选择Microsoft   ADO   Data  
Control   ,version   6.0(OLE   DB),按OK,就可以将该控件插入到对话框中。  
4.重复步骤2、3,在对话框中插入Microsoft   ADO   DataGrid   Control   ,version  
6.0(OLE   DB)控件;  
5.选中Data控件,击右键,设置该控件的属性;  
6.选择Control页面,该属性页要连接的数据源,其中提供了3种连接数据源的方法:  
a.使用数据连接文件(Use   Data   Link   File);  
b.使用ODBC数据源(Use   ODBC   Data   Source   Name);  
c.使用连接字符串(Use   Connection   String).。  
在本程序中,我们使用连接字符串,连接SQL  
Server7.0数据库。连接字符串中包含了程序与数据源的连接信息,其形式为Argument=Value,每个连接字符串可以包含多个
Argument=Value表达式,不同的表达式之间以分号间隔,如访问SFJ55.MDB数据库的连接字符串可以写成如下形式:  
Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=e://sfj55.mdb  
ADO支持如下的四种连接字符串的属性设置:  
   
   
   
选择Use   Connection   String选项,按Build...钮,在数据链接属性对话框中选择OLE   DB  
Provider(OLE   DB提供者),此处我们选择Microsoft   OLE   DB   Provider   for  
SQL   Server,按下一步;  
7.在连接属性页中输入服务器名称,笔者使用NT工作站,名称为BUILDER,SQL  
Server装在本机,故此处服务器名称为BUILDER,再选择使用Windows  
NT集成安全设置,在服务器上选择数据库,笔者选择DcProduct,这是一个存放生产明细的数据库。测试连接成功后按确定。也可以选择SQL  
Server   7.0自带的其他数据库和数据表。  
8.选择Data控件属性的RecordSource属性页,其中Command   Type   中有4个选项:  
   
   
对于SQL语句和数据表名,使用过Access97的读者一定很熟悉,至于存储过程的有关信息请参考SQL  
Server的有关书籍。此处我们选择2-adCmdTable,表名选择[SFJ55-27-00-000MX](注意在表名两边加中括号),关闭属性
对话框。Data控件属性设置完毕;  
9.选择DataGrid控件,击右键,设置该控件的属性;  
10.选择All属性页,设置DataSource属性,设置为Data控件的ID号,即IDC_ADODC1,关闭属性对话框;  
11.编译并运行应用程序,即可在DataGrid控件中显示数据表SFJ55-27-00-000MX中的数据。  

到此为止,我们在VC6.0中使用ADO技术建立的最简单的应用程序已经完成,整个过程中没有编写一行代码。只是该程序只能浏览和修改数据,不能对记录进
行添加和删除。如果想增加充足添加和删除记录的功能,在DataGrid控件的All属性页中,设置AllowAddNew和AllowDelete属性
为TRUE。  

这中方法尽管简单,但是对数据库的访问效率较低,使用起来也不灵活,程序员对数据库的控制较少,不能最大限度的发挥ADO技术高速灵活的特点。下面通过一
个实例来介绍在VC6.0中使用ADO对象访问SQL   Server数据库。  
二.使用ADO对象建立数据库应用程序  

在VC中使用过DAO的读者对于CDaoWorkspace,CDaoDatabase,CDaoRecordset,CDaoTableDef等MFC
类应该非常熟悉,然而,遗憾的是VC中并没有提供有关ADO对象的类,那么我们将怎样使用ADO对象呢?实际上,这可以通过在应用程序中使用预编译指
令#import来引入相关类的指针。在使用ADO对象之前必须首先在程序中加入如下的代码:  
   
#define   INITGUID //定义有关的变量  
#import   "C:/program   files/common  
files/system/ado/msado15.dll"rename_namespace("ADOCG")rename("EOF","EndOfFile")
//引入动态链接库  
using   namespace   ADOCG;  
#include   "icrsint.h" //包含头文件  
   

以上代码在程序的运行过程中将产生名为msado15.tlh的头文件,该头文件中定义了一些有用的智能指针,以下是该文件关于智能指针定义的一段代
码:  
//  
//   Smart   pointer   typedef   declarations  
//  
   
......  
_COM_SMARTPTR_TYPEDEF(Properties,   __uuidof(Properties));  
_COM_SMARTPTR_TYPEDEF(Property,   __uuidof(Property));  
_COM_SMARTPTR_TYPEDEF(Error,   __uuidof(Error));  
_COM_SMARTPTR_TYPEDEF(Errors,   __uuidof(Errors));  
_COM_SMARTPTR_TYPEDEF(_Connection,   __uuidof(_Connection));  
_COM_SMARTPTR_TYPEDEF(_Recordset,   __uuidof(_Recordset));  
_COM_SMARTPTR_TYPEDEF(Fields,   __uuidof(Fields));  
_COM_SMARTPTR_TYPEDEF(Field,   __uuidof(Field));  
_COM_SMARTPTR_TYPEDEF(_Parameter,   __uuidof(_Parameter));  
_COM_SMARTPTR_TYPEDEF(Parameters,   __uuidof(Parameters));  
_COM_SMARTPTR_TYPEDEF(_Command,   __uuidof(_Command));  
......  

这是基于ADO的支持类_com_ptr_t的一些指针的定义,其中宏_COM_SMARTPTR_TYPEDEF()在VC6.0头文件
COMDEF.H中定义。  
下面是我们经常使用的几个智能指针:  
_ConnectionPtr   连接对象指针  
_RecordsetPtr 记录集对象指针  
_ParameterPtr 参数对象指针  
_CommandPtr   命令对象指针  
FieldPtr 域对象指针  
PropertyPtr 属性对象指针  
ErrorPtr 错误对象指针  
下面在一个程序实例中说明这些指针的用法,程序访问的数据库为SQL   Server  
7.0中自带的NothWind,数据表名为Employees,这里只访问EmployeeID,LastName,FirstName,Title等
4个字段:  
步骤1.启动VC6.0,使用MFC   AppWizard建立一个单文档应用程序,命为AdoCls,在Step1到Step  
5中使用缺设置,直接按Next即可,在Step  
6中,选择视图类的基类为CFormView,然后按Finish,按OK,生成应用程序框架,在应用程序的ResourceView中,删除
IDD_ADOCLS_FORM对话框中自动生成的静态文本;  

步骤2.新建一个文本文件,并在其中输入如下内容,然后将其保存为MyData.h,再将其添加到AdoCls工程中(菜单命
令:Project/Add   To   Project/Files...),输入内容如下:  
//MyData.h  
#define   INITGUID  
#import   "C:/program   files/common  
files/system/ado/msado15.dll"rename_namespace("ADOCG")rename("EOF","EndOfFile")  

using   namespace   ADOCG;  
#include   "icrsint.h"  
   
#if   _MSC_VER   >   1000  
#pragma   once  
#endif   //   _MSC_VER   >   1000  
   
class   CMyRecord   :   public   CADORecordBinding  
{  
BEGIN_ADO_BINDING(CMyRecord   ) //开始数据捆绑  
ADO_FIXED_LENGTH_ENTRY(1,adInteger,m_id,lid,TRUE);  

ADO_VARIABLE_LENGTH_ENTRY2(2,adVarChar,m_lastname,sizeof(m_lastname),llastname,TRUE)  

ADO_VARIABLE_LENGTH_ENTRY2(3,adVarChar,m_firstname,sizeof(m_firstname),lfirstname,TRUE)  

ADO_VARIABLE_LENGTH_ENTRY2(4,adVarChar,m_title,sizeof(m_title),ltitle,TRUE)  

END_ADO_BINDING() //结束数据捆绑  
public:  
long   m_id;  
ULONG   lid;  
char   m_lastname[20];  
ULONG   llastname;  
char   m_firstname[10];  
ULONG   lfirstname;  
char   m_title[30];  
ULONG   ltitle;  
   
};  
   

在MyData.h头文件中定义了一个CMyRecord类,该类的基类必须是CADORecordBinding,且没有构造函数和析构函数,只有一组
用于数据捆绑和映射的宏和一组变量。其中以“m_”开头的4个变量分别对应数据表Employees中
EmployeeID,LastName,FirstName,Title等4个字段,它们将用于存取这4个字段的实际值,以“l”开头的4个ULONG
类型的变量是对应字段的状态值,用于判断数据的捆绑是否成功,后面的程序代码中将看到其应用。用于数据捆绑和映射的宏在头文件icrsint.h中定义,
数据的捆绑和映射主要用到如下的几个宏:  
(1).   BEGIN_ADO_BINDING   ()和   END_ADO_BINDING()

文章出处:DIY部落(http://www.diybl.com/course/7_databases/database_other/20071226/95673.html
)

抱歉!评论已关闭.