ODBC为什么需要数据库驱动程序的解释

4
一个月前,我向一个朋友展示了如何使用.NET查询MySQL。虽然它能正常工作,但他不明白为什么我们需要在ODBC中与MySQL配合使用"驱动程序"。他认为ODBC就足够了。
当他问我原因时,我尽力回答,但我的回答并不充分。
这个问题的正确解释是什么?
3个回答

11
你需要驱动程序的原因是ODBC本身不是用于与数据库通信的驱动程序:它是一个抽象和API。
实质上,它是一个适配器层,旨在使所有数据库对客户端应用程序看起来相同:您与ODBC库交互,它会要求驱动程序管理器使用正确的数据库(基于连接字符串)来满足您的请求。
因此,为了使你的数据库品牌与ODBC兼容,必须提供一个实现所需API以便它可以处理使用ODBC函数的客户端发出的请求的驱动程序。

5
正如已经提到的,ODBC是一个API和抽象层,而不是一款软件。
然而,前面的回答暗示ODBC驱动程序仅来自数据库供应商,这是不准确的。有许多第三方ODBC驱动程序提供者,包括我的雇主。
许多数据库供应商将ODBC驱动程序作为“复选框项”与其引擎一起提供,以便宣称支持ODBC,但这些捆绑驱动程序是最小实现和/或某种方式被削弱,以鼓励“本地”应用程序开发作为“更优越”的选择。事实上,来自数据库供应商的ODBC驱动程序通常比来自第三方供应商的ODBC驱动程序性能差得多,既有意(因为如果数据库客户端应用程序编写到数据库的本地API,他们的用户将被锁定到该数据库引擎),也有无意(许多数据库供应商根本不了解与数据库无关的ODBC API的微妙之处,无法将其正确映射到其特定于数据库的“本地”API)。这种锁定实际上并不符合数据库供应商的长期利益(事实上,他们是ODBC最初开发的重要参与者),但短期业务目标有时会优先于长期愿景。
我的雇主OpenLink Software早就意识到需要比较不同数据库、ODBC驱动程序、操作系统和DSN连接属性之间的性能,并创建了一个开源基准测试实用程序OpenLink ODBC Bench。这个工具是跨平台的,并在您自己的环境中模拟TPC-A和TPC-C测试,以查看哪些组件最适合您的需求。作为一个开源项目,所有测试都可以检查,以确保没有任何偏向,并且它们也可以根据您特定的部署进行扩展和适应。
当然,这忽略了为什么要使用来自.NET的ODBC驱动程序(这需要使用桥接ADO.NET提供程序来连接ODBC数据源,从而进行双重抽象的额外API转换),而不是直接通过MySQL的ADO.NET提供程序...

0

我看到这个帖子有点旧了,但我想了解一下关于所有DBMS的标准ODBC驱动程序的看法。我知道我们需要为每个DBMS使用单独的驱动程序。是否可能拥有一个标准的ODBC驱动程序,可以在任何数据库引擎之间无缝使用。我没有看到不同驱动程序之间在其能力方面有很大的区别,可以做一些与其他驱动程序完全不同的事情


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接