VC作数据库开发时ODBC、ADO、DAO该选哪一个? VC作数据库开发时ODBC、ADO、DAO该选哪一个?各有何利弊?分别适合于什么样的开发?希望高手指点!也希望大家都就此谈谈自己实际开发中的经验!发言者有分!100分不够另开贴给! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对客户来说,都一样,对你自己来说,选用ADO稍微好一点原因:ODBC是比较老的调用了,速度比ADO要慢一些,而DAO是专门为微软的ACCESS准备的(现在范围扩大 ),现在已经基本上进入维护期了。因此选用ADO是不二选择。而且发布的时候也容易。 要考虑的问题是数据库部分在你的程序中占什么地位? 如果你的程序基本上完全是数据录入、查询、汇总、打印等,性能要求高,打算使用C/S结构,那么PowerBuilder的确是不错的选择。 如果数据库要求不高,只是本地的,对于用户界面、通信、多媒体等方面有要求,那么我觉得VB、VC、Delphi更好。我个人不太喜欢BDE,主要是分发和建立别名比较麻烦。 一旦你确定了基本使用的语言,那么采用什么方式也就定下来。如对于VC、VB,访问本地数据库一般为DAO,访问服务器上数据库一般使用ODBC/RDO/ADO。我在访问本地数据库一般不使用ADO,主要是开销太大。 在设计本地数据库时,我喜欢使用Access(MDB)格式,因为在设计时可以借助Access 97来帮助进行一些简单的数据操作。 从功能简单的数据库(如Jet Engine)到复杂的大型数据库系统(如oracle),VC++6.0都提供了一些编程接口。本文主要介绍以下五种: 1.ODBC API; 2.MFC ODBC类; 3.MFC DAO类;(数据访问对象) 4.MFC的OLE/DB; 5.ActiveX数据对象(ADO)。 1.开放数据库连接(ODBC API):提供了一个通用的编程接口,允许程序与多种不同的数据库连接。它为Oracle,SQL Server,MS Excel等都提供了驱动程序,使得用户可以使用SQL语句对数据库进行直接的底层功能操作。在使用ODBC API时,用户须引入的头文件为"sql.h","sqlext.h","sqltypes.h"。用ODBC API创建数据库应用程序遵循一定的基本步骤: 第一步是分配ODBC环境,使一些内部结构初始化。完成这一步,须分配一个SQLHENV类型的变量在ODBC环境中做句柄使用。 第二步是为将要使用的每一个数据源分配一个连接句柄,由函数SQLALLocHandle()完成。 第三步是使用SQLConnect()把连接句柄与数据库连接,可以先通过SQLSetConnectAttr()设置连接属性。 然后就可以进行SQL语句的操作,限于篇幅,相关的函数就不具体介绍了,读者可以参考相关书籍。 操作完成后,用户取回相应的结果,就可以取消与数据库的连接。 最后需要释放ODBC环境。 ODBC API的特点是功能强大丰富,提供了异步操作,事务处理等高级功能,但相应的编程复杂,工作量大。 2.MFC ODBC类:MFC1.5后的版本里引入封装了ODBC功能的类。通过这些类提供与ODBC的接口,使得用户可以不须处理ODBC API中的繁杂处理就可以进行数据库操作。主要的MFC ODBC类如下。 CDatabase类:一个CDatabase对象表示一个到数据源的连接,通过它可以操作数据源。应用程序可使用多个CDatabase对象:构造一个对象并调用OpenEx()成员函数打开一个连接。接着构造CRecordSet对象以操作连接的数据源,并向CDatabase对象传递记录集构造程序指针。完成使用后用Close()成员函数销毁CDatabase对象。一般情况下并不需要直接使用CDatabase对象,因为CRecordSet对象可以实现大多数的功能。但是在进行事务处理时,CDatabase就起到关键作用。事务(Transaction)指的是将一系列对数据源的更新放在一起,同时提交或一个也不提交,为的是确保多用户对数据源同时操作时的数据正确性。 CRecordSet类:一个CRecordSet对象代表一个从数据源选择的一组记录的集合-记录集。记录集有两种形式:snapshot和dynaset。前者表示数据的静态视图,后者表示记录集与其他用户对数据库的更新保持同步。通过CRecordSet对象,用户可以对数据库中的记录进行各种操作。 CRecordView类:CRecordView对象是在空间中显示数据库记录的视图。这种视图是一种直接连到一个CRecordSet对象的格式视图,它从一个对话框模板资源创建,并将CRecordSet对象的字段显示在对话框模板的控件里。对象利用DDX和RFX机制,使格式上的控件和记录集的字段之间数据移动自动化,也就是说,用户甚至不要编写一行代码就可以实现简单的数据库记录查看程序。 CDBException类:由Cexception类派生,以三个继承的成员变量反映对数据库操作时的异常: m_nRetCode:以ODBC返回代码(SQL_RETURN)的形式表明造成异常的原因。 m_strError:字符串,描述造成抛出异常的错误原因。 m_strStateNativeOrigin:字符串,用以描述以ODBC错误代码表示的异常错误。 MFC数据库类成员函数都能抛出CDBException类型的异常,所以在代码对数据库进行操作后监测异常是正确做法。 MFC ODBC类在实际开发中应用最广,因为它功能丰富,操作相对简便。3.MFC DAO(数据访问对象)编程:DAO用于和微软的Access数据库接口。在数据库应用程序如果只需与Access数据库接口时,使用DAO编程较方便。其主要类如下。 CDaoWorkspace:CDaoWorkspace对象可以让一个用户管理从登陆到离开期间,指定的密码保护的数据库会话全过程。大多数情况下不要多个工作区也不要创建明确的工作区对象。因为在打开数据库和记录集对象时,它们可以使用DAO缺省工作区。 CDaoDatabase:代表一个连接,类似上述CDatabase类。 CDaoRecordSet:用来选择记录集并操作,类似上述CRecordSet类。 CDaoRecordView:类似上述CRecordView类。 CDaoException:类似上述CDBException类。 CDaoTableDef:表示基本表或附加表的定义。每个DAO数据库对象包括一个称为TableDef的收集,包含所有存储的DAO表定义对象。CDaoTableDef对象可以用来控制表定义。 CDaoQueryDef:CDaoQueryDef对象表示了一个查询定义(querydef)。 CDaoFieldExchange:支持数据库类使用的DAO字段交换(DFX)例程。也可处理事务,类似MFC ODBC类。 MFC DAO仅用来支持Access数据库,应用范围相对固定。 4.OLE DB:OLE DB在数据提供程序和用户之间提供了灵活的组件对象模型(COM)接口,这种灵活性有时会使得操作复杂化。OLE DB框架定义了应用的三个基本类。 数据提供程序Data Provider:拥有自己的数据并以表格形式显示数据的应用程序。提供OLE DB的行集COM接口,期显示范围可以从单一数据表格的简单提供者知道更复杂的分布式数据库系统。 使用者Consumers:使用OLE DB接口对存储在数据提供程序中的数据进行控制的应用程序。用户应用程序归为使用类。 服务提供程序Service Provider:是数据提供程序和使用者的组合。服务提供程序没有自己的数据,但使用 OLE DB使用者接口来访问存储在数据提供程序中的数据。然后,服务提供程序通过打开数据提供程序接口使得数据对使用者有效。服务提供程序常用于向应用程序提供高层次服务,比如高级分布式查询。 OLE DB编程时,用户使用组件对象开发应用程序。这些组件有: 枚举器:用于列出可用的数据源; 数据源:代表单独的数据和服务提供程序,用于创建对话; 对话:用于创建事务和命令; 事务:用于将多个操作归并为单一事务处理; 命令:用于向数据源发送文本命令(SQL),返回行集; 错误:用于获得错误信息。 5.ActiveX数据对象(ADO):是微软提供的面向对象的接口,与OLE DB类似,但接口更简单,具有更广泛的特征数组和更高程度的灵活性。ADO基于COM,提供编程语言可利用的对象,除了面向VC++,还提供面向其他各种开发工具的应用,如VB,VJ等。ADO在服务器应用方面非常有用,特别是对于动态服务器页面ASP(Active Server Page)。 ADO对象结构类似于OLE DB,但并不依靠对象层次。大多数情况下,用户只需要创建并只使用需要处理的对象。下面的对象类组成了ADO接口。 Connection:用于表示与数据库的连接,以及处理一些命令和事务。 Command:用于处理传送给数据源的命令。 Recordset:用于处理数据的表格集,包括获取和修改数据。 Field:用于表示记录集中的列信息,包括列值和其他信息。 Parameter:用于对传送给数据源的命令之间来回传送数据。 Property:用与操作在ADO中使用的其他对象的详细属性。 Error:用于获得可能发生的错误的详细信息。 在VC++使用ADO需要进行COM操作,详细方法在此就不赘述了。 在当今流行的分布式开发环境下,VC++6.0在数据库开发方面有较强的优势,学会 在不同的场合选用不同的技术,对开发人员来说是必要的技术。 个人认为ADO是现时最先进的技术,同时也非常方便好用。 ADO使用太简单了,维护也方便。现在哪个用户还在用486/586,这一点点的开销算什么。 俺现在mfc odbc,,给俺感觉啥都一样,,没感觉性能有多少差别不是重量级的都一样重量级的要好好考虑考虑 我用adovc做数据库已经够麻烦的了用ado还简单一些 ado与ODBC的区别我好像在一个文章里面看过的,那就是假如只取一个记录的所有列的话,ODBC稍微快一点,其他的都是ADO快的。而且好像ADO的POOL搞得比ODBC要好一点。 TMD,我直接用数据库提供的C 库 现在流行第五季哦,错了,现在流行ADO 根据我个人应用的经验:1.同一性:在同一个应用中尽量避免使用多种实现2.可扩展性:即使本地数据库,我建议也不要用DAO而用ADO。宜作好长远打算。如功能扩充要求支持远程或数据库管理员和操作员分开。至于ODBC,众所周知,难于管理组织分块模块化面向对象化,最好弃之!此外,现在的开发基本上不需要过多考虑开销资源浪费的问题。君不见,微软的Visual Studio.NET就是浪费资源的典型,我想MS这样做也是经过深思熟虑后决定的。综上所述,在ODBC、DAO和ADO中宜尽量选用ADO! 能不用vc最好,vc提供的控件于数据库搭配有一定难度,使用起来代码也比较多,效果可能没有其他编程工具好。如果要用的话就选用ado。用vc做做普通的数据库开发还行。 我做过一个各种数据库接口性能的测试,如果是在这三种中选择,强烈推荐你用ADO. OLE DB ,很好的,有框架为你生成代码 用ADO特别是数据库中表很多时比较方便,自己也容易控制 mfc 导入文本文档资源问题 关于在视图中显示图形的问题 今天上完班,明天就可以回家了。。。。 createprocess 创建一个命令行进程进程,如何判断进程启动成功,如何得到命令行输出? 请问程序该如何调试? 关于socket的问题,请高手指点。 如何打包,做安装文件 简单SQL语句问题? 文件夹里文件太多,读取速度慢,怎么处理比较好? CreateProcess怎么用? 高难度问题,dll怎么卸载? what's the difference
对你自己来说,选用ADO稍微好一点
原因:ODBC是比较老的调用了,速度比ADO要慢一些,
而DAO是专门为微软的ACCESS准备的(现在范围扩大 ),现在已经基本上进入维护期了。
因此选用ADO是不二选择。而且发布的时候也容易。
如果你的程序基本上完全是数据录入、查询、汇总、打印等,性能要求高,打算使用C/S结构,那么PowerBuilder的确是不错的选择。
如果数据库要求不高,只是本地的,对于用户界面、通信、多媒体等方面有要求,那么我觉得VB、VC、Delphi更好。我个人不太喜欢BDE,主要是分发和建立别名比较麻烦。
一旦你确定了基本使用的语言,那么采用什么方式也就定下来。如对于VC、VB,访问本地数据库一般为DAO,访问服务器上数据库一般使用ODBC/RDO/ADO。我在访问本地数据库一般不使用ADO,主要是开销太大。
在设计本地数据库时,我喜欢使用Access(MDB)格式,因为在设计时可以借助Access 97来帮助进行一些简单的数据操作。
现在哪个用户还在用486/586,这一点点的开销算什么。
vc做数据库已经够麻烦的了
用ado还简单一些
那就是假如只取一个记录的所有列的话,ODBC稍微快一点,
其他的都是ADO快的。
而且好像ADO的POOL搞得比ODBC要好一点。
我直接用数据库提供的C 库
哦,错了,现在流行ADO
1.同一性:在同一个应用中尽量避免使用多种实现
2.可扩展性:即使本地数据库,我建议也不要用DAO而用ADO。宜作好长远打算。如功能扩充要求支持远程或数据库管理员和操作员分开。至于ODBC,众所周知,难于管理组织分块模块化面向对象化,最好弃之!此外,现在的开发基本上不需要过多考虑开销资源浪费的问题。君不见,微软的Visual Studio.NET就是浪费资源的典型,我想MS这样做也是经过深思熟虑后决定的。综上所述,在ODBC、DAO和ADO中宜尽量选用ADO!
特别是数据库中表很多时比较方便,自己也容易控制