小编典典

DBD :: ODBC与Win32 :: odbc

sql

我不知道使用一个相对于另一个有什么优点和缺点。这个问题源自我在这里得到的建议:根据记录的实际大小为数据库查询动态分配缓冲区。
我正在寻找重要差异的列表(而不是详尽的列表),这将有助于我做出有根据的决策。我有win32 ::
odbc的工作经验,可以对此进行真正的证明。如果有人可以在“书面”详细信息的基础上分享他/她的经验,那将非常有帮助。

附加信息:Win32 ::
ODBC的作者在此处写道:http :
//www.roth.net/perl/odbc/docs/ODBC_Docs.htm-
“可以使用Win32 :: ODBC的几种替代方法,例如数据库接口( DBI)版本,称为DBD :: ODBC。此ODBC
Perl扩展可在Mac和UNIX等不同平台上使用,尽管缺少Win32 :: ODBC的某些功能,但它还是用于ODBC访问数据库的好工具。 ”
我想知道您是否知道它缺少的功能。


阅读 255

收藏
2021-03-08

共1个答案

小编典典

我选择DBI堆栈的主要原因是灵活性和广泛的测试人员/调试人员。这样一来,DBI您就可以选择使用特定于您的特定数据库引擎的驱动程序。是的,大多数数据库还提供ODBC驱动程序,但是某些特定功能可能无法使用,或者通过该特定API更加麻烦。此外,它DBI是独立于平台的,因此将来任何可能的移植到另一个OS的麻烦都大大减少了。最后,DBI用于数据库访问的人员数量
远远 超过了使用的人员Win32::ODBC,这意味着可能会更快地发现并修补错误。

在查看另一个链接的问题时,我注意到您正在使用Oracle。使用时,DBI您可以选择在内部使用DBD::ODBC还是DBD::Oracle在内部使用。您可以通过简单地更改DBI->connect方法的参数之一来进行选择。

如果使用的是Oracle Instant
Client,则使用DBD::Oracle可以节省在仅需要通过Perl进行访问的计算机上下载/安装ODBC组件的麻烦。当然,从等式中删除ODBC层也可能有好处。


更新 :Win32 ::
ODBC是ODBC中间件API从C到Perl的相对直接转换。如果您愿意将自己限制为Windows上的ODBC连接,那么这样做确实具有相对较小的优势,即可以直接控制正在控制基础数据库的ODBC中间件层。当然,这并不意味着ODBC
API特别忠实于基础数据库的API和/或功能。

同样,假设您使用的是Oracle,您似乎有3种选择:

  • Win32::ODBC -> ODBC-> Oracle的ODBC驱动程序〜> Oracle客户端-> Oracle服务器
  • DBI-> DBD::Oracle〜> Oracle客户端-> Oracle Server
  • DBI-> DBD::ODBC〜> ODBC-> Oracle的ODBC驱动程序〜> Oracle Client-> Oracle Server

“〜>”位于需要“填充”一个API以适合另一个API的层的右侧。

现在,我可以理解,如果您发现对ODBC中间件的API保真度是理想的。就个人而言,我宁愿具有DBI&所使用的较短软件堆栈的灵活性DBD::Oracle。尽管我还会猜测DBD::ODBC,即使使用两个垫片层,涉及的较长堆栈也可以满足所有需求的99%以上。

DBI&之间的另一个区别Win32::ODBC是,围绕堆栈构建了 许多
模块DBI。整个DBIx命名空间都取决于它。在metacpan.org上搜索每个模块,然后单击其页面上的“反向依赖关系”链接,您将清楚地看到Perl社区为每个模块分配的相对价值。

因此,如果您需要其他纯粹自私的理由:具有DBI经验的Perl开发人员也将发现自己 更大的需求。严重地。

2021-03-08