【问题标题】:SQL Server 2012 via native C++ (no ATL) preferred access method from WindowsSQL Server 2012 通过 Windows 的本机 C++(无 ATL)首选访问方法
【发布时间】:2013-03-23 15:24:19
【问题描述】:

我有一个在 Windows 64 下运行的本机 C++ 应用程序,它不使用 ATL(也不会)。我希望能够通过网络从我的应用程序连接到 SQL Server 2012。

我有以下要求:

  • 性能是关键

  • C++ 只会插入记录(比如通过调用存储过程),不会插入其他记录(没有选择、删除或更新)。

  • 记录插入应该是非阻塞的(异步)。

我将选择范围缩小到 OLE DB 和 ODBC,因为它们满足上述条件。然而,互联网上似乎有很多关于使用什么的相互矛盾的建议。例子:

我真的很困惑,想就按照我的标准访问 SQL Server 的最佳技术发表更多意见。

【问题讨论】:

  • 请考虑,仅仅因为某些东西已被弃用并不意味着您不能使用它。世界各地都有不受支持的 SQL Server 2000 机器,它们运行在早已过时的操作系统上,即使它们运行的​​大部分软件早已被弃用,这些应用程序仍继续运行。我并不是说这是使用旧废话来支持新的论据,但是由于您选择使用 C++,也许您可​​以做更糟糕的事情...
  • Native Client 设置包括一个 OLE DB 提供程序 (SQLNCLIxx) 和一个 ODBC 驱动程序。 SQLNCLI11 是一个 OLE DB 提供程序,它不是“SQL Server Native Client ODBC 驱动程序”。只需使用 ODBC。
  • @wqw 这是您所说的用法示例吗? blog.nhaslam.com/2011/12/19/… 即使它包含 sqlncli.h?

标签: c++ sql-server odbc oledb


【解决方案1】:

OleDB 和 ODBC 都使用 SQLNCLI。请参阅Component Names and Properties by Version 表,观察 Sqlncli.dll/Sqlncli10.dll/Sqlncli11.dll 如何成为 ODBC 和 OleDB 的驱动程序。

如果您查看Data Access Technologies Road Map,您会发现 ODBC 和 OleDB 都是最新的并且受支持。 deprecated 是 SQLOLEDB 和 SQLODBC,它们是用于 OleDB 和 ODBC 的旧 MDAC SQL Server 驱动器(即 sqlsrv32.dll 和 Sqloledb.dll)。两者都有升级路径和推荐,见Updating an Application to SQL Server Native Client from MDAC

因此结论是,您可以安全地继续使用 ODBC 和 OleDB,只要确保您使用基于现代 SLNCLI 的驱动程序,而不是旧的、已弃用的 MDAC 驱动程序。

使用已弃用驱动程序的主要风险是缺乏对新数据类型(例如地理、层次结构、日期时间2 等)的支持。

【讨论】:

【解决方案2】:

我多年前体验过 OleDB(使用 ATL)和 ODBC(使用 MFC)。

但接口很少是瓶颈,通常插入/更新占主导地位(实际上,我使用批量复制+存储过程进行了大型插入/更新)。

无论如何,我会建议一种中间(第三种?)方式:OTL,这使得 C++ / ODBC 可以承受。

【讨论】:

  • 我看了一下,它使用的是 STD 模板,我更喜欢 ODBC 函数的 C 风格方法。我不关心代码的复杂性,因为它只是插入(和一个插入语句)。
  • 你标记了 C++ 你的问题,然后我建议了我所知道的最好的界面。但是'de gustibus...'
  • 你说得对,我在这一点上并不是很准确,因为我的重点是提到的三个标准(性能、插入和异步)。
  • 总之,OTL不能和ODBC C接口相比,它更多高级
猜你喜欢
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
相关资源
最近更新 更多