4

我有一个 ac# 网站,允许客户端通过使用第 3 方 ActiveX 控件绕过 Web 服务器,从他们的 PC 直接连接到远程 SQL Server 数据库。我最初使用的是SQLOLEDB提供程序,它工作正常。客户端位于内部网络中(使用 Windows 机器和 Internet Explorer),并且该网站不适合暴露于一般互联网。

我不得不从使用SQLOLEDB提供程序升级到SQLNCLI10提供程序,以适应 SQL Server 2008 中的新数据类型。它在我的 PC 上工作,但在生产中中断。我没有意识到它之所以有效,是因为SQLOLEDB提供程序是 Windows 操作系统 (MDAC/WDAC) 的一部分,因此已经存在于客户端的 PC 上。SQLNCLI10提供程序包含在 SQL Server 2008 中,必须单独安装在客户端计算机上(因为它们中的大多数都没有安装 SQL Server,但我有)。

我可以为他们提供一个链接,让他们从中下载独立的 Microsoft SQL Server 2008 Native Client 提供程序,但我如何检查他们是否已经安装了它?

4

2 回答 2

8

令人沮丧的是,微软似乎没有就如何测试客户端库是否存在给出明确的答案。Web 搜索和注册表嗅探至少会显示以下注册表项:

HLKM\SOFTWARE\Microsoft\SQLNCLI11 (key:InstalledVersion)
HLKM\SOFTWARE\Microsoft\SQLNCLI10 (key:InstalledVersion)
HKLM\SOFTWARE\Microsoft\Microsoft SQL Native Client\CurrentVersion (version 9, i presume?)
HLKM\SOFTWARE\Microsoft\Microsoft SQL Server Native Client 10.0\CurrentVersion (key:Version)
HLKM\SOFTWARE\Microsoft\Microsoft SQL Server Native Client 11.0\CurrentVersion (key:Version)

MSDN 上的这篇博文建议使用注册表项来回答相关问题(是否安装了 SQL Server Express)是错误的、错误的、错误的,您应该改为编写 200 行 WMI 代码。WMI 方法似乎同样没有文档记录,对我来说更加脆弱。

由于Microsoft 允许重新分发 SQL Native Client 包,因此最好的选择可能是将 msi 简单地包含在应用程序的安装程序中,然后无论是否需要都运行它。有关它们提供的各种驱动程序,请参阅此受支持操作系统列表,其中显示还有一个版本 10.5(!)。

SQLNCLI 与基于 MDAC 的驱动程序并行安装,因此在其上运行应该是安全的,msiexec并让它处理细节。

于 2012-09-14T21:19:48.700 回答
5

只需检查注册表项或文件

  • 注册表:HKLM\SOFTWARE\Microsoft\Sqlncli10
  • 文件:检查 \System32 中的 sqlncli10.dll

或者你也可以使用 WMI

您也可以HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\SQLNCLI10\CurrentVersion根据您的链接比较版本,例如 10.0.1600.22

于 2011-01-07T05:57:14.410 回答