要在访问数据时判断出应该使用哪一种技术,这并不容易。可能需要公用实用程序来处理多个数据库类型;部分数据可能出现在本地硬盘驱动器上,部分在网络上,还有一部分在主机上。甚至客户安装在设备上的产品也会使这种选择更加困难。例如,你所期待的ODBC支持级别也许依赖于所安装的MicrosoftOffice的版本,因为这个产品不提供ODBC支持。你还会发现,ADO类提供的对象和方法要比ODBC类多。ADO可以提供程序中绝对必须具有的一些特性枣例如,你会发现OLE-DB和ADO两者都支持DFX_Currency,但在ODBC中没有对应的功能枣但你要想掌握它们也必须付出一定的努力。
注 使用ADO而不是ODBC的一个原因是,ADO提供的对象和方法比ODBC多。
选择OLE-DB或ODBC时,有几条一般的规则。因为ADO实际上只是OLE-DB的包装,所以这些规则也适用于它。下面提供一些基本的原则,可以用来帮助你决定选择OLE-DB还是ODBC。
非OLE环境 如果要访问支持ODBC的数据库,而该数据库又在不支持OLE的服务器上,那么ODBC是最好的选择。
非SQL环境 ODBC在处理SQL时非常出众。处理非SQL数据库时,OLE-DB则具有非常明显的优势。
OLE环境 对支持OLE的服务器来说,选择OLE-DB还是ODBC也许是希望各半。如果有ODBC驱动程序可供利用,那么使用ODBC是一个好主意;否则,就只有选择OLE-DB了。
其它的问题往往是复合问题,或者至少是失去了可以用来区别这两种技术的方便的规则。例如,有一些特征是ADO和ODBC所共有的。其中一个特征是,Visual C++允许你直接访问任一种技术。这意味着,可以完全访问ADO和ODBC都提供的每一个特征(是的,这确实不错,但也有缺陷,因为谈到访问,不能说一种技术明显地优于另一种技术)。
如果做了错误的决定,一些熟悉的技术实际上会帮助你把应用程序从ODBC转移到ADO,或反方向转移。两种技术都依靠数据库对象来管理基础的DBMS,而记录集对象则包含针对DBMS的查询结果。另外,ODBC和ADO都以相似的成员来使用数据库和记录集对象。即使要对类和成员名称做一些更改,你仍会发现,ODBC和ADO程序设计的代码非常相似。
ODBC和ADO都依靠外部驱动程序来完成任务。但是,用ADO还可以从Microsoft Jet引擎获得额外的帮助。这个额外的支持是如何使程序设计更加容易的呢?考虑一下,要在哪里执行两个依赖不同引擎的数据库的外部连接。在ODBC下,必须人工执行全部所需的设置。使用ADO意味着,Microsoft Jet引擎会为你执行这些设置。可惜的是,让ADO做这个工作意味着会失去控制级别和一些灵活性,而这正是你从一开始就想用C++获取数据的原因。
注 ODBC和ADO具有相似的特征,如记录集和数据库对象,尽管MFC利用这些对象的方式完全不同。
有一个地方绝对不能使用ADO。如果要访问16位数据,就不能用ADO。不管你怎么想,都必须用ODBC。然而,几乎没有人还在使用16位数据库了。大多数的新工程都会使用32位接口,这意味着会有一个选择。老的工程已经有了嵌入代码的数据访问方法,所以你也实在没有必要在这里做决定。
ODBC的一点不足是,不能像以前使用ADO那样跟踪事务。以Microsoft Jet引擎使用ADO时,应该得到事务的工作区级的支持。ODBC只提供数据库级的事务支持,这就是说,可以从几个不同的工作区跟踪事务(这使得调试非常困难,还可能导致其它类型的问题)。
注释 处理ODBC数据库时,ADO提供数据库级的支持;这和ODBC提供的支持层次是相同的。除非你使用Microsoft Jet引擎,否则得不到工作区级事务支持的好处。
1.odbc,oledb,ado,adox的关系:
odbc: 曾经的数据库通信标准
oledb: 在一切对象化的趋势下,ms打算用它取代odbc.
oledb分两种:直接的oledb和面向odbc的oledb,后者架构在odbc上,这样没有自己的oledb提供者的数据库也可以使用oledb的特点了。
ado: 其实只是一个应用程序层次的界面,它用oledb来与数据库通信。
adox: 对ado的安全性,维护性(如:创建一个数据库)进行了扩展。
按我的理解:ado封装了oledb,oledb一种是升级了ODBC,另一种是升级封装了ODBC
2.用odbc连接数据库:
odbc中提供三种dsn,它们的区别很简单:用户dsn只能用于本用户。系统dsn和文件dsn的区别只在于连接信息的存放位置不同:系统dsn存放在odbc储存区里,而文件dsn则放在一个文本文件中。
它们的创建方法就不说了。
在asp中使用它们时,写法如下:
A.sql server:
用系统dsn: connstr="DSN=dsnname; UID=xx; PWD=xxx;DATABASE=dbname"
用文件dsn: connstr="FILEDSN=xx; UID=xx; PWD=xxx;DATABASE=dbname"
还可以用连接字符串(从而不用再建立dsn):
connstr="DRIVER={SQL SERVER};SERVER=servername;UID=xx;PWD=xxx"
B.access:
用系统dsn: connstr="DSN=dsnname"
(或者为:connstr="DSN=dsnname;UID=xx;PWD=xxx")
用文件dsn: connstr="FILEDSN=xx"
还可以用连接字符串(从而不用再建立dsn):
connstr="DRIVER={Microsoft Access Driver};DBQ=d:\abc\abc.mdb"
3.用oledb连接数据库:
A.sql server:
connstr="PROVIDER=SQLOLEDB;
DATA SOURCE=servername;UID=xx;PWD=xxx;DATABASE=dbname"
B.access:
connstr="PROVICER=MICROSOFT.JET.OLEDB.4.0;
DATA SOURCE=c:\abc\abc.mdb"
4.使用UDL文件:
UDL文件是用来存放数据库连接信息的一个文本文件,有点象文件DSN,不过UDL是针对OLEDB(直接的和面向ODBC的)的。
UDL的创建方法:
右击桌面或资源管理器-》新建-》microsoft数据连接
其中的设置工作应该比较清楚了。
UDL的用法:
connstr="file name=e:\abc\abc.udl"
补充:OLEDB的方法连接 Sybase
oledb使用:
"Provider=Sybase.ASEOLEDBProvider;Server Name=myASEserver,5000;Initial Catalog=myDBname;User Id=username;Password=password"
odbc使用:
"Driver={SYBASE ASE ODBC Driver};Srvr=Aron1;Uid=username;Pwd=password"