我想知道使用其中一种比另一种有什么优点和缺点。这个问题源于我在这里得到的一个建议:Allocate buffer dynamically for DB query according to the record actual size
我正在寻找一个清单的重要差异(而不是一个详尽的清单),将帮助我作出一个明智的决定。我有使用with 32::odbc的工作经验,并能真正证明这一点。如果有人能在“枯燥”文档的基础上分享他/她的经验,那将是非常有帮助的。
附加信息:Win32 32::ODBC的作者在这里写道:“Docs.htm有几种可供选择的Win32 32::ODBC可用版本,例如名为DBD::ODBC的DataBase接口版本。这个ODBC Perl扩展可以在Mac和UNIX等不同平台上使用。它是一个很好的工具,可以用来访问数据库,尽管它缺乏Win32 32::ODBC所具有的一些功能。”我不知道你是否知道它缺少什么功能。
发布于 2014-09-24 18:52:14
我使用DBI堆栈的主要原因是灵活性和更广泛的测试人员/调试器。使用DBI,您可以选择使用专门调优到特定数据库引擎的驱动程序。是的,大多数数据库也提供ODBC驱动程序,但通过该特定API,某些特定功能可能不可用或更麻烦。此外,DBI是独立于平台的,使得将来移植到另一个操作系统上的麻烦少得多。最后,使用DBI访问数据库的人远远超过使用Win32::ODBC的人,这意味着可能会更快地发现和修补bug。
看看您的另一个链接问题,我注意到您正在使用Oracle。使用DBI,您可以选择在引擎盖下使用DBD::ODBC还是DBD::Oracle。您可以通过简单地更改DBI->connect方法的一个参数来做出此选择。
如果您正在使用Oracle客户端,那么使用DBD::Oracle可以为您在只需要通过Perl访问的计算机上下载/安装ODBC组件节省麻烦。当然,从等式中删除ODBC层也可能有好处。
更新:Win32 32::ODBC是ODBC中间件API从C到Perl的一种相对直接的转换。如果您愿意将自己限制在Windows上的ODBC连接上,这确实有一个相对较小的优势,即让您更直接地控制控制底层数据库的ODBC中间件层。当然,这并不意味着ODBC特别忠实于底层数据库的API和/或功能。
同样,假设您使用的是Oracle,您似乎有三个选择:
Win32::ODBC -> ODBC -> Oracle的ODBC ~>客户端-> Oracle服务器驱动程序DBI -> DBD::Oracle ~> Oracle客户端-> Oracle服务器DBI -> DBD::ODBC ~> ODBC ->为ODBC ~> Oracle客户端-> Oracle服务器提供驱动程序其中的'~>‘是在一个层的右边,需要“收缩”一个API来适应另一个API。
现在,我可以理解,如果您认为对ODBC中间件的API保真度是可取的。就我个人而言,我更希望拥有DBI的灵活性& DBD::Oracle使用的更短的软件栈。尽管我也会猜测,涉及DBD::ODBC的更长的堆栈将适合所有需要的99+%,即使有两个shim层。
DBI与Win32::ODBC的另一个不同之处在于,围绕DBI堆栈构建了许多模块。整个DBIx名称空间依赖于它。在metacpan.org上搜索这些模块中的每一个,然后单击页面上的“反向依赖”链接,您将得到一个关于Perl社区分配给每个模块的相对值的清晰图片。
因此,如果您想要一个额外的、纯粹自私的理由:一个拥有DBI经验的Perl开发人员也会发现自己的需求要大得多。我是认真的。
https://stackoverflow.com/questions/26022754
复制相似问题