电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

VC的数据库应用

来源:开心麻花作者:开心麻花2025-09-191

VC的数据库应用(精选7篇)

VC的数据库应用 第1篇

VC6.0开发数据库的技术是多种多样的,包括ODBC API、MFC ODBC、DAO、OLE DB、ADO等。在这些技术中,OLE DB是Microsoft的新数据库接口,它基于组件对象模型COM(Component Object Mode1)。这种接口是Microsoft对其系列数据库API的最新补充之一。它的特点在于对所有数据库文件提供了一个统一的调用接口,它既可以访问关系数据库,又可以访问非关系数据库[1]。

直接使用OLE DB的对象和接口设计数据库应用程序需要书写大量的代码。为了简化设计,VC提供了ATL模板用于设计OLE DB数据应用程序和数据提供程序。利用ATL模板可以很容易地将OLE DB与MFC结合起来,使数据库的参数查询等复杂的编程得到简化。MFC提供的数据库类使OLE DB的编程更具有面向对象的特性。Visual C++提供的用于OLE DB的ATL模板可分为数据提供程序的模板和数据使用程序的模板(客户模板),本文将介绍的是后者。

1 OLE DB的原理

1.1 OLE DB应用程序的结构

从结构上看,使用OLE DB数据库开发接口的应用程序可以分为3类,OLE DB数据提供程序(OLE DB Data Provider)、OLE DB数据应用程序(客户程序,OLE DB Data Consumer)和OLE DB服务提供程序(OLE DB Service Provider)。

OLE DB数据库应用程序的基本结构如图1所示[2]。

当数据使用者需要对数据库进行操作时,数据使用者并非直接对数据源发出指令,而是通过OLE DB接口与数据提供者进行交互。数据提供者从数据源取得所要查询的数据时,由数据使用者将数据从接口取出并使用。在这些操作中,数据使用者和数据提供者都不必知道对方的具体应用,而只需要对接口进行操作,这样简化了程序的设计。

1.2 OLE DB对象的结构

OLE DB是由几种COM对象组成,其中每个对象又包含若干个接口,这些对象和接口的定义是依照COM模型制定的。每一组件必须输出一系列OLE DB接口,OLE DB接口的对象结构如图2所示。

2 使用OLE DB客户模板开发用户程序

2.1 通过AppWizard建立数据库应用程序

使用AppWizard创建一个基于对话框的应用程序OledbCustomer,该程序使用的数据源是保存人员姓名和年龄的Access数据库Students。

2.1.1 加入ATL产生的模板类

为了应用ATL模板类,必须使用ATL Object Wizard,从Insert菜单中选择New ATL Object,在出现的对话框中选择Category中的DataAccess,在Objects中选择Consumer,选择OLE DB数据提供程序类型,根据所访问的数据库的类型从中选出合适的数据提供程序。在程序OledbCustomer中,使用的是Access数据库,所以选择“Microsoft Jet 4.0 OLE DB Provider”项。

2.1.2 使用ATL产生的对象

1) 对对话框的资源进行编辑,其中的每个控件所定义的变量对应着数据库的访问器(CStudentsAccessor)所定义的公有成员变量。

2) 在对话框类中定义一个CStudents类的对象,这样可以在应用中使用CStudents类所提供的操作函数,注意不是CStudentsAccessor对象。

3) 在对话框类的消息函数OnInitDialog()中,调用该对象的Open()函数来打开行集,即在对话框初始化时将数据库打开,并取回所需要的行集,这样在对话框存在的期间就可以使用所查到的消息[3]。

2.2 数据库基本操作

2.2.1 打开数据源对象和会话对象

打开数据源对象时,首先声明一个CDataSource类的对象,然后调用其Open()函数。打开会话对象时,首先声明一个CSession对象,然后调用其Open()函数。其定义分别如下:

HRESULT Open(LPCTSTR szProgID,DBPROPSET*pPropSet);

HRESULT Open(const CDataSource&ds);

2.2.2 打开行集对象

使用CCommand类对象的方法Open()来打开一个由指定的命令产生的行集。

HRESULT Open(DBPROSET*pPropSet=NULL,LONG*pRowsAffected=NULL,bool bBind=true);

2.2.3 遍历记录集

通过行集类CRowset的移动函数可以在行集中随意移动,然后按需要取回各行的数据。

2.2.4 修改记录

修改一条记录的步骤如下:

给用户记录类中的对应变量赋新值。

调用行集函数SetData()更新数据库中的数据。

程序OledbCustomer中修改当前记录的代码如下:

void COledbCustomerDlg::OnButtonModify() //修改记录

{

UpdateData( TRUE );

if(m-nAge<0 || m-nAge>120)

{

MessageBox(″输入的年龄不符合实际″, ″输入错误″,

MB-ICONEXCLAMATION | MB-OK);

return;

}

//更新变量

m-Students.m-id = m-nID;

-tcscpy( m-Students.m-name, m-strName );

m-Students.m-age = m-nAge;

-tcscpy( m-Students.m-department, m-strDepartment);

HRESULT hResult = m-Students.SetData(); //更新数据库

if( FAILED( hResult ) )

MessageBox(″不能更新数据库″, ″数据库错误″, MB-ICONSTOP | MB-OK);

else

MessageBox(″修改成功!″, ″提示″, MB-ICONINFORMATION| MB-OK);

}

编译运行,一个基本的OLE DB数据应用程序OledbCustomer就产生了。运行时结果如图3所示。

3 结束语

Visual C++6.0通过MFC ATL大大简化了我们开发OLE DB数据应用程序的复杂度,使我们免与同一个个COM API打交道,在实现开发的简易性的同时又向我们提供了相当的灵活性。所有代码都上机通过,在开发中可以稍加扩展即可使用[4]。OLE DB能够访问各种关系型和非关系型数据库的能力以及其它方面的优点,使它成为开发数据库程序的一个良好选择。

参考文献

[1]宋斌,陈玉亭.Visual C++6.0教程[M].北京:北京希望电子出版社,1999.87-98.

[2]李博轩.数据库开发指南[M].北京:清华大学出版社,2000.46-64.

[3]郑章,程刚,章勇,等.Visual C++6.0数据库开发技术[M].北京:机械工业出版社,1999.61-70.

VC的数据库应用 第2篇

1 课程设计思路

以“知识、能力及素质三维一体”的教学理念探索构建本课程教学新体系,加强学生能力与素质培养。

长期以来课程教学一直是以知识传授为中心,从课堂教学到课外实践、考试或课程设计等教学环节也都是围绕学生对课本知识的理解与掌握而进行训练的;上机实验室等实践性教学环境也是为帮助学生理解和巩固所学课本知识而建立的;课程教学评价主要是学生对知识掌握质量的考核评价。因而整个课程教学体系反映为单一知识传授的课程教学模式,所培养出的学生基础知识较扎实,但知识面相对较窄,动手能力普遍较差,缺乏创新精神,难以适应竞争日益激烈的社会发展的需要。在新形势下,课程教学已不再是单纯的传授知识,而更要注重开发学生的潜能和培养学生的能力和素质。这就必须把以知识传授为中心的课程教学模式转变到重视人才素质和能力的培养模式上。对此,我们探索构建了由理论教学、实验教学和设计软件训练模块构成的数据库应用程序设计课程教学新体系。

本课程教学模块由基础教学、技能提高教学、综合运用教学三个阶段组成。基础知识教学内容阶段为本课程教学基本要求所规定的机构分析与设计的内容,以确保学生扎实掌握本课程的“三基内容”(即基本理论、基本知识及基本技能);技能提高教学阶段是将SQL Server和VC#进行结合,组织程序设计教学,以提高软件的开发能力;综合运用教学阶段是以人事工资考勤管理系统为主线,将软件工程、SQL Server和C#三门课程中的主要内容,按照软件公司团队开发模式培养学生的实践能力。

本课程的课时分配加强了对学生编程能力的培养,理论课时28学时,实践课时68学时,还安排了为期2周的项目实训。理论课时与实践课之比为1:4。

2 课程目标

该课程前导课程为计算机基础、C#面向对象程序设计;后续课程为ASP.NET程序设计。

该课程以.NET程序员的岗位任职要求,对软件工程、SQI Server、VC#进行了重构,还以商业项目《人事工资考勤管理系统》为主线,重新设计了该课程的知识、能力、素质教育体系,我们始终把知识和技能的教学溶入到项目的制作过程中,实现了学中做、做中学、做学合一,解决了学以致用、学好善用的问题。课程采用任务驱动教学法,对于培养学生分析问题、解决问题和提出问题的能力起到了较好的作用,能有效地调动学生的学习积极性,促进学生积极思考问题,推进学生积极动手实践。课程中的教学内容采用最新的开发平台,VS2008和SQL2008,是软件市场急需的.NET程序员必学内容;按照知识目标、能力目标、素质目标三维一体思路对教学内容进行取舍。

2.1 知识目标

在软件企业进行数据库开发时,将NET程序员必备技能:SQL Server、VC#.NET、软件工程,三门课程的中主要知识点进行整合。

2.2 能力目标

按照传统的教学大纲的对学生能力的描述,分为四个等级“理解”、“基本掌握”、“熟练掌握”、“灵活运用”,按照软件企业用人标准,做系统要快,并且质量要好,因此,我们把能力的底线定为“熟练掌握”,对教学内容中的重点内容要求学生要熟练掌握。

2.3 素质目标

素质目标重点在两个方面体现:一是团队合作精神,单元测试要对自已编写的模块负责,保证模块运行正确,输入输出要能得到预想的结果;如果有错误则要在迭代时进行修复;在评审时要从团队的整体利益出发,对就是对,错就是错,不能因为过去是同乡,评审时发现系统有了致命的错误也不敢批评。重构时更要注重发挥团队作用,因为通常是团队成员修改他人的代码。代码的修改要求改性能越改越好。二是培养自主学习能力,因为软件开发技术更新比较快,通常三至五年要进行产品换代,如果程序员不注重学习,不超过五年便会被淘汰掉。遵循学生职业能力培养的基本规律,以真实工作任务及其工作过程为依据整合教学内容,科学设计学习性工作任务,教、学、做结合,理论与实践一体化,实训、实习等教学环节设计合理。)

3 课程内容的组织

以任务驱动、项目制教学为主要手段,全面更新教学内容。该课程以为特定企业开发的实际商业项目为教学主线,以学生要学习的特定企业“人事工资考勤管理系统”为本课程的教学任务,并按教学时序,将“人事工资考勤管理系统”分解成需求分析、设计、代码实现、测试等环节,融入到教学中。设计了业务需求、UI层、业务层BLL、数据层DAL,要求围绕业务需求,让学生“在做中学,在学中做”,一边分析设计系统模块,一边在老师的指导下自学编码实现功能。程序员在从事真实的软件项目开发中,先给定开发任务,程序员在实现功能时常常会感到“书到用时方恨少”,还需要不断学习软件开发新技术方能完成模块开发;为学生就业打下基础,在设计教学内容时,后面各章节又新增了程序设计的基础知识,其目的让学生要边做边学,培养学生的自学能力。实现了以学生为中心,教师为主导的新教学方法。

阶段划分、任务、知识目标、能力目标和素质目标设计示例如右表1所示。

4 课程特色

课程以工作任务为主线,以一个商业项目《人事工资考勤管理系统》为蓝本,按照由简单到复杂,由单一到综合的原则设计教学过程,按照研发软件产品的开发流程,将VC#.NET、SQL Server数据库、软件工程三门课程进行了有机整合。主要有以下几个特色:

4.1 实施课程整合,全面更新课程教学理念

课程将3门课程按照软件开发工程管理要求,对教学内容进行了全面整合。整合后的课程打破了原有课程单独开设时条块分割、教学内容重复、软件工程模型抽象难懂的缺陷,以培养学生的综合应用能力为目的,使学习内容形象化。同时课程整合后有效压缩了理论学时:把SQL Server课程64课时(理论32课时、上机32课时)、软件工程课程64课时(全为理论课时)、VC#面向对象程序设计课程96课时(理论32课时,上机64课时)中的理论课时共128课时压缩成为64学时,节约更多的理论课时用于实训和商业项目开发。

4.2 改革考核模式,促进学生知识、能力、素质同步发展

改变传统的“平时成绩+期末理论考试成绩”或“平时成绩+期末理论考试成绩+期末项目考试成绩”评定学生学习效果的方式,从学生纪律、团队合作精神、获取信息能力、发现问题解决问题能力、文档规范与处理能力、项目实际完成能力全方位进行考核,以促进学生知识、能力、素养各个方面协调发展。并根据不同层次学生的学习能力,按照基础任务、提高任务、应用任务三级考核。达到基础任务完成要求为合格,提高任务完成要求为良好,应用任务完成要求为优秀。

4.3 模拟公司真实开发环境,增加学生岗位职业能力

课程以NET程序员岗位能力所必备知识为基准,在多数章节中设计了业务需求,这是模拟软件产品生产过程中的第一个环节在业务需求后面设计了模块的分析设计、编码测试。其目的培养学生能把用户需求变成程序代码的学习迁移能力,是程序员必备的专业素养,是教学中的难点,也是学生掌握开发技能的重点。各章中的业务需求、数据设计、界面设计、编码实现还能模拟软件开发的真实工作情景,让学生以软件企业业务分析人员、数据设计人员、界面美工设计人员、程序员等角色进入开发实训环节中,分担相应的工作,锻炼提高学生的岗位能力。

5 课程小结

该课程于2006年被重庆正大软件学院评为院级重点课程,2007年评为院级精品课程,2008年被重庆市评为精品课程。

摘要:VC#.NET数据库应用程序设计是按照由浅到深、由易到难、螺旋式上升的方式将数据库、程序设计语言、软件工程三门课程进行了有机地整合,进行了卓有成效的探索与实践。通过多年实践表明,课程建设不仅有利于培养学生学习兴趣和学生的实际编程能力,而且有利于师资队伍的建设和发展。

关键词:VC#.NET,课程建设,探索与实践

参考文献

VC++访问数据库的方法研究 第3篇

随着Visual C++软件开发工具的广泛推广记载数据库方面的应用日趋广泛和深入,越来越多的软件开发人员和爱好者希望理解并掌握应用Visual C++管理开发数据库的技术和方法。VC++提供了几种接口(ODBC、DAO、OLE/DB、ADO)来支持数据库编程,利用这些接口可以在程序中直接操作各种各样的数据库,如(SQL Server、Microsoft Access、Microsoft Fox Pro等等。

2 ODBC

ODBC(Open Database Connection开放数据库互连)是一种使用SQL的数据库应用程序设计接口。它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口),为ODBC编程提供了一个面向对象的方法,这使得利用MFC来创建ODBC的应用程序非常方便。在使用ODBC API时,用户须引入的头文件“sql.h”,”sqlext.h”,”sqhypes.h”。MFC对ODBC的封装主要是开发了Cdatabase类和CRecord Set类[1]。

Cdatabase类:该类可以实现对数据源的操作。通过构造Cdatabase类对象,调用它的Open或者Open Ex成员函数建立数据源连接。CRecord Set类:记录集类提供从数据源中提取的结果记录集并对其进行操作。它通过SQL语句返回,可以对表和视图进行查询或存储。要注意的是在应用程序中,一般不直接使用CRecord Set类而是使用其派生类,因为当使用MFC Class Wizard产生一个CRecord Set类的派生类时MFC Class Wizard会自动添加相应数据库表中字段的成员变量并自动重载CRecord Set类的成员函数Do Field Exchange()。通过使用RFX函数来完成数据库字段与记录集字段数据成员变量的数据交换。在程序中使用MFC ODBC,除登录数据源之外,还需要在stdafx.h中包含afxdb.h。

3 DAO

ODBC的优点是它的使用比较简单,只要登录Windows控制面板中的数据源,就可以使ODBC连接到相应的数据库。但是使用ODBC访问数据库速度较慢,同时ODBC德尔使用需要很多相应的部件支持。DAO克服了ODBC的一些缺陷,由于它实际上使通过Microsoft Jet数据库引擎来访问数据库,所以DAO方法非常适合访问Jet型数据库(.mdb),同时使用DAO方法不需要登录数据源,只要指明数据库的路径即可。

VC++的ODBC和DAO方法在使用形式上比较相似,ODBC访问记录集的基类是CRecord Set,DAO则为Cdao Record Set,差别就是加上“DAO”,通过定义这些类的对象并调用相应的成员函数就可以实现Access数据库和表的动态创建。ODBC存取数据库时使用RFX_Long Binary。使用App Wizard的过程基本上与使用ODBC时相似,只是在选择数据源时要选择已建立好的DAO数据源,在后从系统中选出源数据库和表,令其自动生成这部分的代码。在应用程序中使用MFC DAO可以通过以下步骤来实现:

首先应确保在stdafx.h头文件中包含了afxdao.h头文件:

#include“afxdao.h”

接着创建自己的Cdao Record Set类(设为Mydao Record Set),并使它与你所需要的数据库的表相连。同时在文档类的On OpenDocument()函数中加入

m_pset->open();

最后创建自己的对话框,选择Class Wizard的Class Info页。在Foreign Class项填入先前所创建的Mydao Record Set,在ForeignVariable项填入m_pset,并对各个edit栏用变量映射。

4 OLE/DB

DAO也存在较大的缺点:主要是MFC DAO与Jet数据库引擎之间的版本。由于Visual C++.NET环境和向导不再支持DAO(虽然仍包括DAO类),用户必须手工编写过去由向导执行的任务,Microsoft建议新项目采用OLE/DB模板或ODBC。OLE DB是基于COM借口的访问数据库的新技术[2],所以它继承了COM接口所有特性,具有较好的稳定性,由于接口的标准性,使得程序可以被应用到任何提供了数据程序的数据源,因此使用OLE DB开发的程序具有比较好的移植性。另外OLE DB通过将数据库的功能分为客户和服务器两个方面,提高了数据库访问效率。前面提到的传统数据库访问技术(ODBC、DAO)都只能访问关系型数据库,而OLE DB可以访问任何形式的文件系统,包括传统的关系型数据库和非关系型数据源及用户自定义的文件格式。但是在基于COM技术的数据库访问中通常使用ADO技术而不是OLE/DB。

5 ADO

ADO对象模型包括了7个对象:1)数据连接(Connection)对象建立一个数据交换环境,应用程序通过Connection访问数据;2)命令(Command)对象通过已建立的Connection发布命令完成操作数据库功能;3)记录集(Record Set)对象存储查询命令返回的结果;4)错(Error)对象时记录应用ADO过程中出现错误的信息;5)属性(Property)对象代表数据提供者的具体属性;6)字段(Field)对象代表一个记录集的一个域;7)参数(Parameter)对象代表SQL存储过程或有参数查询中的参数。其中Connection、Command和Record Set三个对象是主体对象,它们可以被独立创建和释放。Connection对象是用来建立和维护与数据源的连接,对数据创建和执行对数据库的操作命令,可以使用该对象执行SQL语句或调用存储过程;Command对象执行后将返回一个Record Set对象。Record Set对象包含执行数据库操作后返回的一个记录集。通过该对象可以浏览和更新数据库中保存的记录[3]。

4.1 ADO对象与数据源的连接

ADO是基于COM技术的,因此在使用ADO对象之前必须初始化COM环境,在VC工程应用类Initinstance的成员函数中添加如下初始化COM环境的代码:

1)在MFC中没有可与ADO一起使用的类,因此若要在Visual C++程序中使用ADO对象,首先需要导入ADO动态链接库,在创建的VC工程的stadafx.h头文件中添加如下代码[4]:

其中no_namespace属性表示编译器不继承本身的命名空间,rename(“EOF”,”End Of File)表示将所有“EOF”替换为“End Of File”。为了方便使用ADO的各个类,应该在程序开头调用#import指令,在ADO的类库中包含了3个智能指针Connection Ptr、Command P-tr和Record Set Ptr,其中Connection Ptr指针用来管理连接一个数据源提供者所要求的信息,它提供了很多方法如Open和Close可以打开和关闭一个到数据库提供者的活动连接(Live Connection),还可以通过Excute方法在数据源上执行命令,而Record Set Ptr封装了数据源提供者返回的记录,它可以用于浏览返回的结果,也可以用于插入、删除或修改以有记录。为了代码的安全性,必须在函数调用的地方添加“trycatch”程序块:

2)使用Connection对象和数据库建立连接

3)利用建立好的连接(Connection)对象,通过Command对象执行SQL命令,如果是从数据库中读出数据,则将提取出的数据放入记录集Record Set对象。

4)使用完毕后断开和数据库的连接,释放对象。需要调用以下代码释放程序占用的COM资源。在VC工程应用累的Exit Instance成员函数添加如下代码,将初始化的对象释放,清除为ADO对象准备的COM环境

6 结束语

在VC++中包含了开发数据库的全方位的支持,通过它所提供的访问计数程序开发人员就可以访问各种数据库。本文概括了VC访问数据库的几种技术特点及操作步骤。使程序开发人员和爱好者全面了解各种访问技术特性,选择适合自己的开发技术。

摘要:用VC++开发一个管理系统,要使用数据库对所需的数据进行存储与管理。该文介绍了Visual C++访问开发数据库的几种技术概况及其访问的方法:ODBC,DAO,OLE/DB和ADO,并对各种技术的使用范围、访问效率、工作稳定性等进行了比较,并给出了基本使用方法。

关键词:ODBC,DAO,OLE/DB,ADO

参考文献

[1]梁小亮,宋祖勋.Vc++6.0访问Oracle数据库技术.微型电脑应用2008(24,6):63-65.

[2]王樱,徐雨明.Vc++中数据库访问技术研究.为计算机信息2006(22,43):256-258.

[3]谭锋,蔡丰.基于ADO技术动态创建SQL Server数据库.计算机时代2007(3):60-62.

基于VC的数据库编程设计与实现 第4篇

1 VC数据库编程的特点

对于例如Access,Oracle,FoxPro和DBase IV这些产品都是完全把数据库管理作为核心的,这类产品的最大优点就是善于帮助编程者创建商业数据库管理器。编程人员在应用这类数据库时,就可以使用Delphi和Visual Basic等环境来协助实现构建这类管理器。事实上使用这类软件之后会感觉非常简单和方便,数据库的管理系统DBMS具备成熟的编写、良好的用户界面以及高速的搜索能力。所以如果从方便简单的角度来看,Delphi和VisualBasic这类的RAD环境应该更适合在数据库的开发中,使用这类软件能够大大简化程序的设计工作。

虽然对于多数的数据库应用来讲,选择使用VC++也许并不是最合适的。但同时也应该考虑到,单一的数据库管理应该要与其他的一些功能相结合才能更多地发挥作用,而一般的数据库软件并不轻易支持那些拓展功能。此时,为了应用各种复杂功能,Visual C++便能够为编程人员提供的那些重要的东西。由于VC能对底层提供强大的支持,本身高效率的代码结构作用下,编写出的数据库有关的应用程序就能有规模小、实现底层访问并且可以提供实时访问的优点。例如在编写数据库的实用程序和驱动程序时,就适合选择Visual C++来实现更方便的设计环境,又例如遇到对内存有限制或是硬盘较小的时候,Visual C++语言便能为编程人员提供无限无价的工具。

2 VC数据库编程设计与实例

2.1 ODBC方式

Microsoft最开始是以开放数据库的互连(ODBC)为宗旨的,ODBC属于一种Microsoft引进的早期数据库的接口技术,也是ADO的前身技术。Microsoft之所以会引进这个技术,其中一个最重要的原因就是它能用非语言的专用方式为程序员提供一种访问数据库内容时更为便捷的方法。也能使编程者访问DBF文件或者Access Basic获得MDB文件里的数据信息时,不需要掌握Xbase程序的专业设计语言。ODBC工作的方式和Windows类似,它是通过包含在DLL中的驱动程序来完成任务的。ODBC提供了一套两个驱动程序,一种提供数据库管理器的专业语言,另一种提供程序设计语言的公用接口。这两种驱动程序的结合点在于允许Visual C++通过标准函数来调用经过公用接口访问的数据库内容。当然,也包含其他与ODBC相关的实用程序设计类型的DLL,它就获得了管理ODBC数据源的许可。

Visual C++中的MPC类库为一些数据库类做了定义。在运用ODBC进行编程时,设计者会经常用到CRecordView(可视记录集类),CRecordSet(记录集类)以及CDatabase(数据库类)。其中的CRccordSet类对象能够提供从数据源里获得的记录集。而CRecordView类对象可以通过控制的方式显示出数据库的记录。该视图可以实现与一个CRecordSet对象中的表视图进行直接连接。CDatabase类对象主要提供连接数据源通道,通过它编程人员能够对数据源直接实施操作。

2.1.1 数据链接

CRecordSet类中实现了定义一种成员变量m_pDatabase:Cdatabasc*m_pDatabase,这是能够指向对象数据库类的一个指针。若是在CRecordSet类的对象调用到Open()函数以前,把一个已经成功打开的CDatabase类对象指针信息传送至m_pDatabase,便能实现共享一样的CDatabase类对象。

2.1.2 查询记录

OBDC的查询记录通常使用的是CRecordSa::Open()以及CRecordSet::Requery()成员函数。运用CRecordSet类对象以前,还应该先使CRecordSa::Open()函数去取得有效记录集。当已经成功使用了CRecordSa::Open()函数后,再去用查询操作时,便能够应用到CRecordSet::Requefy()函数了。值得注意的是,编程人员在调用到CRecordSet::Open()函数的过程中,若是已经把一个完全打开的CDatabase对象指针发至CRecordSet类对象中的m_pDatabase成员变量,则必须运用此数据库对象来建立一个ODBC的连接;或者是当m p Database是空指针时,马上新建一个CDatabase类对象,同时还要让它连接到缺省数据源中,然后再对CReccrdSet类对象进行初始化操作。缺省的数据源可以通过GetDefaultConnect()函数来获取。

若是没有发现指定的参数,程序就只能运用程序中缺省的SQL语句,即对GetDefaultSQL0函数里所指定的SQL语句来进行操作。

2.2 ADO方式

理解ADO方式之前需要先了解一下OLEDB的知识。OLEDB顾名思义就是用OLE(更具体地说,就是部件的对象模型COM)作为数据访问所提供的一套接口。与其他任何的COM对象相同,都能够实现查询、创建或是撤销OLEDB的一个对象。称OLEDB的对象来源为提供者。各类OLEDB提供者属于Visual C++软件包的其中一部分,当然也可能是在厂商进行升级相关数据库的产品时提供的。OLEDB的优点在于,同一提供者能够与任何的一个Visual Studio产品合作:例如Visual J++,Visual InterDev,Visual Basic和Visual C++。OLEDB还会依赖事件,这一点也与任何一个COM对象相同。这些事件能主动说明什么时候会要求更新数据库表,来显示其他编程中所生成的新项数据,或是其请求的表会在什么时候准备完全,以备用户查看。当然还会出现这样的事件过程,它们能用作发送信号作为通知各类数据库出现的错误,或是其他要求立刻轮询的活动。

ADO既可以应用VC所具备的强大功能,且使用起来更为方便,下面将以ADO模式数据库的访问为例,来展示在VC环境下怎样进行数据库的应用。以下是使用ADO编程的具体方法。

(1)应用预处理指令#import

程序员在编译程序过程中,会遇到VC++读出msadol5.dll所含的类型库信息,然后自动产生2个此类型库里的头文件以及实现文件msadol5.tlh与msadol5.tli(在用户的Debug或是Release目录里)。这两个文件中已经定义了ADO所有的方法和对象,还有部分枚举型常量等等。这里的程序只需要直接对这些方法进行调用就可以了,这就和使用MFC里的COleDispatDriver类调用到Automation对象过程十分相似。

(2)使用MFC里的CIDispatchDriver也是利用读取msadol5.dll里包含的类型库信息,再建立起一个与COleDispatchDriver类相关的派生类,接下来再通过它去调用ADO对象。

(3)直接用COM提供的AP可以使用以下的代码:

以上的3种编程方法中,第一种与第二种比较类似,但笔者认为第一种更为好用一些,而第三种方法可能是最麻烦的。不过第三种可能在效率上也是最高的一种编程法,也具有最小的程序尺寸,且对ADO有最强大的控制能力。如果编程人员需要一种绕过ADO来直接调用OLEDB底层的编程法时,推荐要应用第三种编程。使用ADO编程关键就在于能够熟练掌握ADO所提供的各类方法(mahod)、对象(object)、容器(collection)以及属性(property)。

3 结语

在数据库编程的设计中,VC是一个非常强大的工具。而ADO是Microsoft数据库中的应用程序所开发的一个新接口。它是建立在OLE/DB上的一种高层数据库访问技术。在VC之下应用ADO方式来进行数据库的编程设计既能利用VC的优良特性,更能为编程人员提供便捷,这是一套值得向大家推荐的方法。

摘要:VC适合各类编程人员的需求,ODBC方式和ADO方式是VC的主要两种编程模式。分析了VC数据库编程的特点,比较了VC环境之下的两种主要的数据库开发模式,并给出了详细的ADO模式编程的具体实例。

关键词:数据库,VC,ODBC模式,ADO模式

参考文献

[1]谢厚亮,刘伟跃.VC的数据库应用[J].电脑知识与技术,2009,(05).

[2]廖远来.数据库编程接口及其VC++应用程序设计[J].电脑与电信,2007,(05).

[3]蔡长安.VC++6.0环境下的ODBC数据库接口与编程技术[J].江汉大学学报(自然科学版),2003,(01).

VC的数据库应用 第5篇

关键词:货车占用费,数据录入,查询

在很多查询系统中都是利用数据库 (如Access、SQL和Oracle等) 存储数据, 然后根据查询条件遍历数据库, 搜索出符合条件的数据。当存在系统数据类型固定、数据表单一时, 运用数据库就显得有些过于复杂, 或者说没有太大必要了。因此在该文中提出了要实现无数据库的数据录入与查询系统。

1 功能分析

无数据库的数据录入与查询系统是依据铁路货车占用时间计算应收费用的系统, 即货车占用费测算系统。所谓货车占用费计算系统是根据火车到站时间、出站时间, 以及收费标准, 最终计算出应付铁路部门货车占用费。

在该系统中, 如果设置数据表的话仅需一个表来存储每次的收费及收费依据参数即可。如果选用数据库也未尝不可, 但是非常浪费资源, 因此想到了直接应用文本文档存储数据完全可以解决, 并且根据数据条数可设置成每年的数据存为一个文档。

该系统要具有查询功能, 因此在设计录入功能时, 要将数据规范化存储, 以便根据存储的数据格式, 编写查询功能。在此, 也提醒读者即便是比较简单的程序也要整体考虑, 因为程序的每个执行过程可能都是相辅相成的, 只有做好了铺垫, 楼房才能建的越来越高。

2 功能实现

2.1 框架创建

首先, 创建Visual C++项目下基于对话框的MFC应用程序HnkymsVDExp。

其次, 根据系统功能添加相关控件, 具体系统界面实现如图1所示。

(1) 在对话框界面中, 选择交接站点及车种类对应组合框单击右键, 在快捷菜单中选择“属性”, 在属性框内修改其ID、Type等项, ID设为“IDC_Station”, Type设为“Dropdown”, Data设置下拉框值为“潘集站 (路车) 、谢桥站 (路车) 、潘集站 (材料) ”, 其余项取默认值即可。

朱娜敏王戎张静

(2) 选择组合框单击右键, 在快捷菜单中选择“添加变量”, 弹出对话框, 如图2所示。在类别项下拉菜单内, 选择“Value”项, 变量类型为“CString”, 变量名为“m_Station”。

(3) 用同样方式为各个编辑框设置ID、添加变量。车次对应ID为“IDC_Train”, 变量类型为“CString”, 名为“m_Train”;车数对应ID为“IDC_Num”, 变量类型为“int”, 名为“m_Num”;到达交接站时间对应ID为“IDC_GetTime”, 变量类型为COleDataTime, 名为“m_GetTime”;返回交接站时间对应ID为“IDC_RetTime”, 变量类型为COleDataTime, 名为“m_RetTime”;删除非责任时间对应ID为“IDC_DelTime”, 变量类型为“double”, 名为“m_DelTime”;计费总停时间对应ID为“IDC_Time”, 变量类型为“double”, 名为“m_TTime”;占用费ID为“IDC_VDExp”, 变量类型为“double”, 名为“m_VDExp”。实现语句如下:

(4) 添加4个按钮控件, 名称分别为退出、计算、记录、查询, 对应ID为IDCANCEL、IDOK、IDRECORD、IDRESEARCH, 其中记录功能是在计算功能产生后才具有的, 因此记录按钮初始为灰色, 即不可操作, 将记录按钮属性内“Disabled”设为“True”。

2.2 计算

时间是主要的收费参数, 因此该系统对时间要求比较精确。在系统中, 将到站和返站时间初始化为系统当前时间, 其意义在于将时间格式规范化, 以便按该格式调整并计算前后时间差。

根据铁路收费标准, 以及专用铁路货车使用计费时间, 编写延时费用计算程序。其中货车使用计费时间等于自铁路将货车送到规定的交接地点交给企业时起, 至企业将货车送回规定的交接地点交给铁路时止的时间, 减去该货车标准装卸时间, 再减去1小时走行及技术作业时间。在该系统程序中, 将站内作业时间分别规定为6.0小时和4.5小时, 直接减去。此外, 在系统主界面内还设计了一个可控时间编辑框, 以便特殊情况下处理时间。具体实现函数为:

2.3 录入

以上所说的均为基础功能项。该系统产生了要存储的数据之后, 采用除数据库之外的何种方式进行存储是关键要实现的, 因为这与后面要实现的查询功能也有重要的联系。

针对该系统产生的数据的特点:数据类型一致、年度记录数据量不太大且基本固定, 因此选用文本文档存储记录数据即可。

这样, 系统相关数据经过格式化后均存入.text中, 且每次记录费用的数据保存在同一行。当有新的数据产生时, 将存于文档尾行, 最终存储数据的格式为:

2.4 查询

根据存储的数据格式与功能要求分析, 具有的查询条件可以是:按站点查询、按月份和年份查询, 因此设计查询对话框界面如图3所示。

(1) 在“资源视图”下, 右击“Dialog”文件夹项, 选择“插入Dialog”菜单, 如图4所示。这样在编辑区内就出现了一个包含“确定”、“取消”按钮的基本对话框, 且其属性项“Caption”、“ID”分别默认为“Dialog”和“IDD_DIA-LOG1”, 将默认值分别修改为“查询”、“IDD_DIARES”。

(2) 在基本对话框内, 按如图3所示的布局, 添加各个控件。

(3) 因为在查询对话框内要读取并显示数据, 只插入对话框资源是不能最终解决问题的, 要为该对话框添加一个对应的类才可以, 以该类作为控件对应变量的载体, 才能完成数据的读取, 最终在对话框内显示查询结果。

在编辑区域内的“查询对话框”上右击鼠标, 在弹出的快捷菜单内, 选择“添加类”菜单项, 弹出“MFC类向导”对话框, 如图5所示。选择基类“CDialog”, 创建类名为“DiaRes”的查询对话框类。DiaRes类创建后, 在头文件和源文件内分别自动添加了“DiaRes.h”、“DiaRes.cpp”, 在类视图内自动添加了“DiaRes”, 如图6所示。

(4) 创建了类之后, 就可以为各个控件添加变量或者事件处理程序了。将编辑框控件属性内的ID依次设为“IDC_RStation”、“IDC_RYear”、“IDC_RMonth1”、“IDC_RMonth2”和“IDC_AllExp”, 将列表控制框控件ID设为“IDC_RResult”、View设为“Report”, 功能按钮退出、查询分别命名为“ID-CANCEL”、“ID_Res”。利用前面所述的“系统框架的创建”为控件添加变量的方法为查询对话框控件添加变量或函数, 具体实现代码:

(5) 在初始化函数内设置列表控制框的标题栏, 具体代码:

注意:编写标题栏设置函数之前, 一定要将View (视图类型) 设为“Report”, 否则标题栏设置无效。

(6) 编写读取行数据的函数。

要查询符合条件的数据, 首先要将每行数据读取出来, 然后根据条件判断该行数据是否合适。在读取行数据的过程中要将行内数据对应项与查询条件相比较, 如果一致就要将其存储于中间变量内, 以便在列表控制框内显示结果。具体函数实现如下:

(7) 编写查询函数, 即为“查询”按钮添加事件处理程序。具体内容如下:

(8) 测试查询结果。在“查询”对话框内, 选择相关查询条件, 显示如图7所示的执行结果。

3 功能扩展

该系统仅介绍了计算、录入和查询功能, 其作用在于抛砖引玉。要进一步完善系统的话, 可以为其添加删除功能、将查询数据导出至Excel表功能。

VC的数据库应用 第6篇

一、项目教学法的特点

学生在教师的指导下主动学习、逐步解决项目中遇到的困难, 独立完成一个项目的全过程, 在这一过程中学习掌握教学计划内的教学内容。因此, 项目教学法是一种典型的以学生为中心的教学方法。项目教学法主要有以下几个特点: (1) 通常是在一个短时期内、较有限的空间范围内进行的, 并且教学效果可测评性好。 (2) 由学生与教师共同参与, 学生的活动由教师全程指导, 有利于学生集中精力练习技能。

二、学生已掌握的知识和技术分析

在进行数据库系统项目开发之前, 学生应熟练掌握C++语法、理解MFC的原理及应用、熟悉SQLServer或ACCESS等数据库管理系统的操作方法。学生的自学能力有限, 教师不能期望他们一下子就把所有的技术融会贯通, 而应结合项目, 逐渐地引导学生, 训练学生的编程能力。

三、项目的整体规划

VC++数据库项目应用十分广泛, 涉及金融、人事、医院、学校等领域, 但要作为学生的训练项目, 必须是学生熟悉的范围。因此, 本文确定的任务是:利用VC++和SQLServer开发一套中小型的电脑报价管理系统。该系统的功能有: (1) 客户信息和供应商信息的添加、删除、修改和查询; (2) 配件信息、类型信息和品牌信息的添加、删除、修改和查询; (3) 装机配置和推荐配置信息的添加、删除、修改和查询; (4) 统计查询包括每日收入查询和月收入统计。

四、教学过程设计

1. 项目的需求分析。

在进行具体实践之前, 教师要让学生了解该项目的开发背景和应用领域。如:电脑销售每天都会接待大量的客户, 使用电脑报价管理系统可以大大地提高工作效率, 减少工作中可能出现的错误, 从而为商家带来更大的效益。

2. 项目任务的提出。

教师完整地演示系统各个模块的功能, 让学生清楚地了解每个模块的具体任务, 并产生一定的兴趣。

3. 分组讨论和任务分工。

一个学生独立开发一个综合性的项目, 很显然是不现实的, 一方面是因为课堂时间有限, 一个人无法及时完成整个项目的开发;另一方面是因为一个人开发容易产生疲劳和厌倦的情绪, 工作效率较低。而由若干个学生组成一个小组, 共同完成整个项目的开发, 不但可以提高项目的开发效率, 而且可以锻炼学生的分工协作能力和团队合作精神。因此, 教师应帮助学生进行分组, 确定每组的成员和各自的分工任务。

4. 总结和评价。

在每个子模块完成之后, 学生可以自主进行讨论和总结, 教师要适时对其进行点评, 这样有利于及时发现问题和解决问题, 还可以相互学习、促进小组间的竞争, 调动学生的积极性。项目完成之后, 每个小组要把自己的作品展示给大家看, 介绍作品的功能和特点, 回答同学和老师的提问。评分小组根据作品的功能和答辩情况进行评分, 教师可以对评分结果提出意见和建议, 并指出学生作品中的优点和缺点, 共同商讨进一步提高、改进的方法。

五、结束语

在项目教学中, 学习过程成为一个人人参与的创造实践活动, 注重的不是最终的结果, 而是完成项目的过程。学生在项目实践过程中, 理解和把握课程要求的知识和技能, 体验创新的艰辛与乐趣, 培养分析问题和解决问题的思想和方法。

参考文献

[1]田华娟.试析项目教学法在《Java数据库高级编程》中的应用[J].吉林教育学院学报, 2009, (5) .

[2]钱冬云.项目教学法在《Delphi数据库编程》课程教学中的实践与研究[J].职业教育研究, 2007, (10) .

[3]徐爱春.项目案例教学法在程序设计语言教学中的研究与实践[J].职业教育, 2007, (35) .

VC中使用ADO技术访问数据库 第7篇

Connection,Command,Recordset是ADO对象模型中三个主体对象。可以被独立地创建和释放,而不需要访问更高一层的数据对象。例如:ADO对象允许以打开的方式访问一个Recordset对象而不必首先建立一个与数据源的连接,使得ADO模型比其他对象模型更简单和更灵活。

1.1 引入ADO库文件,初始化COM库

要使用ADO对象访问数据库,必须在工程的stdafx.h文件里用直接引入符号″#import″引入ADO库文件,以使编译器能正确编译。代码如下所示:

该语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数″EOF″改名″ado EOF″。这样不需添加另外的头文件,就可以使用ADO接口了。

应用程序在调用ADO前,必须初始化COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的Init Instance()成员函数里使用Afx Ole Init()来初始化COM库环境。

1.2 使用Connection对象连接数据库

一般通过Connection对象的Open方法来连接数据库,该方法的原型是:

创建ADO的连接,首先要设置ADO连接对象的Connection String属性,该属性提供所要连接的数据库类型、数据所处服务器、要访问的数据库和数据库访问的安全认证信息。Userl D是用户名,Password是登录密码,Options是连接选项,用于指定Connection对象对数据的更新许可权。

常用的连接方式有以下几种:

(1)通过JET数据库引擎对ACCESS 2000数据库的连接:

(2)通过DSN数据源对任何支持ODBC的数据库进行连接:

(3)不通过DSN对SQL SERVER数据库进行连接:

其中Server是SQL服务器的名称,DATABASE是库的名称。下面的一段代码演示了如何创建Connection对象实例及如何连接数据库并进行异常捕捉。

1.3 查询、处理数据,取得结果记录集

为了取得结果记录集,需要定义一个指向Recordset对象的指针:_Recordset Ptr m_p Recordset;并为其创建Recordset对象的实例:

查询、处理数据,需要用到SQL命令。SQL命令的执行可以采用下面三种形式。

(1)用Connection对象的Execute方法执行SQL命令。Execute方法的原型如下所示;

(2)利用Command对象来执行SQL命令,也可以利用Command对象执行SQL语句,并取得结果记录集,举例如下:

(3)直接用Recordset对象进行查询取得记录集,和R-ecordset对象提供了丰富的控制功能,如记录锁定,游标控制等。下面的语句为表格查询:

1.4 使用完毕后,关闭连接,释放对象

2 关于数据类型转换

COM对象是跨平台的,使用了一种通用的方法来处理各种类型的数据,因此CString类和COM对象是不兼容的,需要一组API来转换COM对象和C++类型的数据[3]。_vatiant_t和_bstr_t就是这样两种对象。提供了通用的方法转换COM对象和C++类型的数据。实际项目的开发过程中需要存储较大的二进制数据对象BLOB(Binary Large Object),如:图像文件、音频文件或其它二进制数据。其存取的方式与普通数据有所区别。

BLOB数据的保存需要使用Append Chunk函数,Append Chunk包含在Field对象中,原型为:HRESULT Append Chunk(const_variant_t&Data)。从函数原型中可以看到关键的问题是需把二进制数据赋值给VARIANT类型的变量。读取BLOB数据应该使用Get Chunk()函数,其原型为:_variant_t Get Chunk(1ong Length);给出数据的长度后Get Chunk将返回包含数据的VARIANT类型变量,然后可以利用Safe Array Acccss Data函数得到VARIANT变量中指向数据的char b类型的指针,方便用户的处理。

3 结束语

ADO的对象层次模型封装了数据库访问细节,为C++程序员提供了一种非常好的数据访问策略。使程序员从具体的DBMS中解脱出来,从而极大的减少了软件开发的工作量,缩短开发周期,提高了效率和软件的可靠性。

参考文献

[1]刘天印.基于VC++的数据库访问技术的比较与选择[J].黄石:黄石理工学院学报,2005(4).

[2]Lazar D.Microsoft Strategy for Universal Data Access,[S.l.]:Microsoft Corporation,1997.

VC的数据库应用

VC的数据库应用(精选7篇)VC的数据库应用 第1篇VC6.0开发数据库的技术是多种多样的,包括ODBC API、MFC ODBC、DAO、OLE DB、ADO等。在...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部