mysql的ole db 访问接口msdasql的数据源对象_数据库访问接口(ODBC、OLE DB、ADO)

最近在学C#的数据库编程,对于数据库接口技术这块的知识一直比较模糊,网上查了不少资料,看了几天还是朦朦胧胧的,只能做些笔记再研究了。

我们都知道,“数据库”是指一组相关信息的集合,最早的计算机应用之一也是开发数据库系统,即通过计算机来存储和检索数据的机制。

在数据库发展的前几十年里,数据以各种不同的方式存储并展现给用户,比如:层次数据库、网状数据库,这些都是非关系数据库。

直到1970年,才出现了“关系模型”,借助冗余数据来链接不同表中的记录,关系数据库中的每张表都包含一项作为每行唯一标识的信息(主键)。

关系型数据库:

Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL

非关系型数据库:

NoSql、Cloudant、MongoDb、redis、HBase

在最初的时候,对数据库的程序访问是由本机库来执行的,例如SQL Server的DBLib、Oracle的OCI。

这种方式的优点就是速度快,但缺点更明显,开发人员需使用不同的API来访问不同的数据库系统。一旦更换数据库,工作量将会很大。

一.ODBC(Open Database Connectivity)开放数据库连接

是为解决异构数据库间的数据共享而产生的,允许应用程序以SQL 为数据存取标准,存取不同DBMS(关系型数据管理系统)管理的数据;

使应用程序直接操纵DB中的数据,免除随DB的改变而改变。用ODBC 可以访问各类计算机上的DB文件,甚至访问如Excel 表和ASCI I数据文件这类非数据库对象。

它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

总而言之,ODBC提供了一个公共数据访问层,可用来访问几乎所有的RDBMS。

优点:一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBCAPI进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。

二.DAO(Data Access Object)数据访问对象

它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接连接到 Access 表。

所以如果数据库是Access数据库且是本地使用的话,建议使用这种访问方式。

三.RDO(Remote Data Objects)远程数据对象

让写Windows应用程序的程序师能够进入微软和其他的数据库供给者的数据库。

然后,程序中RDO 陈述使用微软的底层数据存取对象 (DAO) 来实际进入数据库。 数据库供给者写入DAO接口。

是一个到 ODBC 的、面向对象的数据访问接口,它同易于使用的 DAO style组合在一起,提供了一个接口,形式上展示出所有 ODBC 的底层功能和灵活性。尽管 RDO 在很好地访问 Jet 或 ISAM 数据库方面受到限制,而且它只能通过现存的 ODBC 驱动程序来访问关系数据库。但是,RDO 已被证明是许多 SQL Server、Oracle 以及其他大型关系数据库开发者经常选用的最佳接口。RDO 提供了用来访问存储过程和复杂结果集的更多和更复杂的对象、属性,以及方法。

四.OLE DB(Object Linking and Embedding, Database)对象连接嵌入数据库

是微软的战略性的通向不同的数据源的低级应用程序接口,OLE DB不仅包括微软资助的标准数据接口ODBC的结构化查询语言(SQL)能力,还具有面向其他非SQL数据类型的通路。

OLE DB 是建立在 ODBC 功能之上的一个开放规范,ODBC 是为访问关系型数据库而专门开发的,OLE DB 则用于访问关系型和非关系型信息源。

OLE DB 最主要是由三个部分组合而成:

Data Providers 数据提供者

凡是透过OLE DB 将数据提供出来的,就是数据提供者。例如SQL Server 数据库中的数据表,或是附文件名为mdb 的Access 数据库档案等,都是Data Provider。

Data Consumers 数据使用者

凡是使用OLE DB 提供数据的程序或组件,都是OLE DB 的数据使用者。换句话说,凡是使用ADO 的应用程序或网页都是OLE DB 的数据使用者。

Service Components 服务组件

数据服务组件可以执行数据提供者以及数据使用者之间数据传递的工作,数据使用者要向数据提供者要求数据时,是透过OLE DB 服务组件的查询处理器执行查询的工作,而查询到的结果则由指针引擎来管理。

OLE DB 与ODBC 的关系

由于OLE DB 和ODBC 标准都是为了提供统一的访问数据接口,所以曾经有人疑惑:OLE DB 是不是替代ODBC 的新标准?答案是否定的。实际上,ODBC 标准的对象是基于SQL 的数据源(SQL-Based Data Source),而OLE DB 的对象则是范围更为广泛的任何数据存储。从这个意义上说,符合ODBC 标准的数据源是符合OLE DB 标准的数据存储的子集。符合ODBC 标准的数据源要符合OLE DB 标准,还必须提供相应的OLE DB 服务程序(Service Provider),就像SQL Server 要符合ODBC 标准,必须提供SQL Server ODBC 驱动程序一样。现在,微软自己已经为所有的ODBC 数据源提供了一个统一的OLE DB 服务程序,叫做ODBC OLE DB Provider。

五.ADO(ActiveX Data Object)活动数据对象

ADO是DAO/RDO的后继产物。ADO 2.0在功能上与RDO更相似,而且一般来说,在这两种模型之间有一种相似的映射关系。ADO"扩展"了DAO和 RDO 所使用的对象模型,这意味着它包含较少的对象、更多的属性、方法(和参数),以及事件。 作为最新的数据库访问模式,ADO的使用也是简单易用,所以微软已经明确表示今后把重点放在ADO上,对DAO/RDO不再作升级,所以ADO已经成为了当前数据库开发的主流。 ADO涉及的数据存储有DSN(数据源名称)、ODBC(开放式数据连接)以及OLE DB三种方式。后面的例程将详细讲解这三种方式的具体访问实现。---可以说是对odbc,oledb这些系统级的编程接口的汇接,并对DAO,RDO这些应用级的编程接口的升级吧。

ee80144e951739d1f46e8a14dcdd9b37.png

ODBC 、DAO 、ADO 、OLEDB 数据库连接方式区别及联系

ODBC 是一种底层的访问技术,因此,ODBC API 可以是客户应用程序能从底层设置和控制数据库,完成一些高级数据库技术无法完成的功能;但不足之处由于ODBC只能用于关系型数据库,使得利用ODBC很难访问对象数据库及其他非关系数据库。

DAO 提供了一种通过程序代码创建和操纵数据库的机制。最大特点是对MICROSOFT JET数据库的操作很方便,而且是操作JET数据库时性能最好的技术接口之一。并且它并不只能用于访问这种数据库,事实上,通过DAO技术可以访问从文本文件到大型后台数据库等多种数据格式。

ADO是基于OLE DB的访问接口,它是面向对象的OLE DB技术,继承了OLE DB的优点。属于数据库访问的高层接口。

dbb3cd35760a4c9a96b42522853b38c3.png

名词解释:

ODBC(Open DataBase Connectivity)开放数据库互联。是由微软主导的数据库链接标准。

MFC(Microsoft Foundation Class)微软基础类。MFC ODBC是对ODBC的封装。

DAO(Data Access Object)数据访问对象。不提供远程访问功能。

RDO(Remote Data Object)远程数据对象。速度快,支持SQL Server存储过程,同DAO一样是发展很多年了的技术。

OLE-DB(Object Linking and Embedding DataBase)对象链接和嵌入数据库。它依赖于COM和提供OLE DB提供者的厂商而非ODBC使用的SQL。

ADO(ActiveX Data Object)ActiveX数据对象。基于OLE-DB建立连接的局部和远程数据库访问技术。同OLE-DB一样要“年轻”些。

使用中,我们一般用OLE-DB和ADO替代DAO和RDO。

ADO和OLEDB之间的关系

OLEDB是一种底层数据访问界面接口。是用于第三方驱动程序商家开发输出数据源到ADO-技术的应用程序或用于C++的开发者开发定制的数据库组件。

OLE DB 是用于访问数据的重要的系统级编程接口,它是 ADO 的基础技术,同时还是 ADO.NET 的数据源。

ADO 是基于OLE DB的访问接口,它是面向对象的OLE DB技术,继承了OLE DB的优点。属于数据库访问的高层接口。

可以这么说,ADO为OLEDB提供高层应用API函数。

fec68d9835dcf2a2f7a1aa077ca92ae5.png

各种数据接口的连接方式

一、ADO连接

1、连接access数据库

set conn=Server.CreateObject("ADODB.Connection")

conn.open "Driver={Microsoft Access Driver (*.mdb)};dbq="&Server.Mappath("dbname(路径全名)")

2、连接SQL Server数据库

set conn=server.CreateObject("ADODB.Connection")

sql="Driver={SQL Server};server=(local);uid=sa;pwd=sa;database=dbname"

conn.open(sql)

二、ODBC连接(必须先注册数据源---DSN)

(列举配置SQL Server数据库文件DSN,打开管理工具---数据源(ODBC)---打开系统DSN选项卡---单击添加按钮---从列表中选择SQL Server,单击完成---在名称中输入数据库名称,在你想连接的SQL Server服务器中输入(local)---按向导提示完成)

1、连接access数据库

Set conn = Server.CreateObject("ADODB.Connection")

conn.Open "DSN=注册名"

2、连接SQL Server数据库

set conn=Server.CreateObject("ADODB.Connection")

conn.connectionstring="DSN=注册名;UID=sa;PWD=sa;"

conn.open

三、OLEDB连接数据库

1、连接access数据库

set conn=Server.CreateObject("ADODB.Connection")

conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&server.MapPath("dbname(路径全名)")&";Persist Security Info=False"

set rs=Server.CreateObject("ADODB.Recordset")

2、连接SQL Server数据库

set conn=server.CreateObject("ADODB.Connection")

sql="Provider=SQLOLEDB;data source=(local);initial catalog=dbname;User ID=sa;password=sa;"

conn.open(sql)

09e16d9d716d1578b34df836da21109e.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当链接服务器的OLEDB访问接口返回无效的数据时,这意味着在查询或访问数据库时,所获得的结果与预期的不匹配或不存在。 出现此问题的原因可能是以下几种情况之一: 1. 查询语句错误:可能是SQL查询语句中的名拼写错误、使用了不存在的表名或名,或者查询条件不正确。建议检查查询语句中的表名和名是否正确,并确保查询条件的准确性。 2. 数据库结构更改:数据库的结构可能已经发生了变化,例如表结构被修改或重新命名了名。这种情况下,原来的查询语句可能会导致对无效的数据返回要对查询语句进行相应的调整,以适应新的数据库结构。 3. 数据类型转换错误:查询结果中的某些数据可能无法正确转换为所期望的数据类型。这可能是因为查询结果中的某些数据类型与预期的不匹配,例如将字符串值转换为数值类型时发生错误。在这种情况下,要检查查询结果中数据类型,并确保进行正确的数据类型转换。 4. 访问权限问题:如果当前用户没有足够的权限来访问数据库中的某些表或,那么在查询时可能会返回无效的数据。建议检查当前用户的权限设置,并确保具有足够的权限来访问的表和。 针对以上可能的原因,您可以逐一检查,并根据具体情况进行相应的调整,以解决链接服务器的OLEDB访问接口返回无效的数据的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值