回 帖 发 新 帖 刷新版面

主题:用ODBC和ADO连接数据库有什么不同吗?

用ODBC和ADO连接数据库有什么不同吗?
二者能否通用?

回复列表 (共4个回复)

沙发

当然可以,开发组件即可。

板凳

DAO和ODBC的相似之处 

DAO类与ODBC类相比具有很多相似之处,这主要有下面几点: 

二者都支持对各种ODBC数据源的访问。虽然二者使用的数据引擎不同,但都可以满足用户编写独立于DBMS的应用程序的要求。 

DAO提供了与ODBC功能相似的MFC类。例如,DAO的CDaoDatabase类对应ODBC的CDatabase类,CDaoRecordset对应CRecordset,CDaoRecordView对应CRecordView,CDaoException对应CDBException。这些对应的类功能相似,它们的大部分成员函数都是相同的。 

AppWizard和ClassWizard对使用DAO和ODBC对象的应用程序提供了类似的支持。 

由于DAO和ODBC类的许多方面都比较相似,因此只要用户掌握了ODBC,就很容易学会使用DAO。实际上,用户可以很轻松地把数据库应用程序从ODBC移植到DAO。 

Visual C++随盘提供了一个名为DaoEnrol的例子,该例实际上是Enroll的一个DAO版本。读者可以打开DaoEnrol工程看一看,它的源代码与Enroll的极为相似。读者可以按照建立Enroll的步骤来建立DaoEnrol,其中只有若干个地方有差别,这主要有以下几点: 

选取的数据源不同。在用AppWizard创建DaoEnrol时,以及在用ClassWizard创建CDaoRecordset类的派生类时,在Database Options对话框中应该选择DAO而不是ODBC。而且DAO的数据源是通过选择一个.MDB文件来指定的,即点击“...”按钮后在文件对话框中选择要访问的.MDB文件。 

记录集的缺省类型不同。ODBC记录集的缺省类型是快照(Snapshot),而DAO则是动态集(Dynaset)。 

参数化的方式不同。DAO记录集的m_strFilter和m_strSort中的参数不是“?”号,而是一个有意义的参数名。例如,在下面的过滤器中有一个名为CourseIDParam的参数。 
m_pSet->m_strFilter ="CourseID = CourseIDParam"; 
在DoFieldExchange函数中,有下面两行: 
pFX->SetFieldType(CDaoFieldExchange::param); 
DFX_Text(pFX, _T("CourseIDParam"), m_strCourseIDParam); 
DFX函数的第二个参数也是CourseIDParam。 

处理异常的方式不同。例如,在删除记录时,对异常的处理如下所示: 

try 



m_pSet->Delete(); 



catch(CDaoException* e) 



AfxMessageBox(e-> 

m_pErrorInfo->m_strDescription); 

e->Delete(); 



除了上述差别外,AppWizard和ClassWizard也隐藏了一些细微的不同之处,例如,DAO记录集是使用是DFX数据交换机制(DAO record field exchange)而不是RFX,在DAO记录集的DoFieldExchange中使用的是DFX函数而不是RFX函数。

3 楼

据说ODBC比ADO效率好一些 = =

4 楼


是不是vc通过ADO连接sql sever 2000的时候可以在stdafx.h 中导入
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
也可以添加ADOConn.h 和ADOConn.cpp文件?
二者作用是一样的吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册