我有一个c#网站,允许客户端通过第三方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,但我会这样做)。
我可以提供一个链接供他们下载standalone Microsoft SQL Server 2008 Native Client provider,但我如何检查他们是否已经安装了它?
答案 0 :(得分:6)
令人沮丧的是,微软似乎没有就如何测试客户端库是否存在提供明确的答案。 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)
This blog post at MSDN建议使用注册表项来回答相关问题(安装了SQL Server Express)是错误的,错误的,错误的,您应该编写200行WMI代码。 WMI approaches seem对我来说同样没有记载,甚至更加脆弱。
从Microsoft allows the SQL Native Client package to be redistributed开始,也许最好的选择就是在应用程序的安装程序中包含msi,并运行它是否需要。请参阅this list of supported operating system for the various drivers they provide,其中显示还有版本10.5(!)。
SQLNCLI与基于MDAC的驱动程序并行安装,因此在此上运行msiexec
应该是安全的,并让它处理细节。
答案 1 :(得分:4)
只需检查注册表项或文件
即可HKLM\SOFTWARE\Microsoft\Sqlncli10
或者您也可以使用WMI
也可以是HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\SQLNCLI10\CurrentVersion
,您可以根据您的链接比较版本,例如10.0.1600.22