我已经在(64 位)Windows 上安装了带有 php 5.3.5 的 Xampp,我想在(32 位)SQL Server 2005 中使用第 3 方 ODBC 驱动程序连接到数据库,但它总是带来同样的错误“SQL 错误:数据源未找到名称且未指定默认驱动程序”。我创建了一个系统 DSN,并尝试使用 odbc_connect 进行连接。我将非常感谢任何帮助。
4 回答
我们发现问题通常是sqlncli.dll
由于某种原因没有正确注册。这可能是因为dll
文件本身的问题、对注册表的权限等。
以下是我们解决此错误的方法:
Open Regedit
Navigate to H_KEY_LOCAL_MACHINE\Software\ODBC\ODBCINST
NOTE: If it is a 64 bit computer and you are working with a 32-bit SQL install, the path will probably actually be H_KEY_LOCAL_MACHINE\Software\WOW6432Node\ODBC\ODBCINST
在 ODBCINST 键中,验证 SQL Native Clent regkey 是否存在。单击它并验证它的所有值是否填充在屏幕右侧。它应该是这样的:
(Default) REG_SZ (value not set)
APILevel REG_SZ 2
Connectfunctions REG_SZ YYY
CPTimeout REG_SZ 60
Driver REG_SZ c:\windows\system32\slncli.dll
DriverODBCVer REG_SZ 09.00
FileUsage REG_SZ 0
Setup REG_SZ c:\Windows\System32\sqlncli.dll
SQLLevel REG_SZ 1
Usagecount REG_DWORD 0x00000001 (1)
如果您看到的只是 (Default) 条目,则 slncli.dll 未正确注册,这意味着 SQL Native Client ODBC 驱动程序未正确注册。
进行如下操作:
确保您以管理员身份登录。授予当前登录用户对 regkey 的完全控制权限。请注意,您可能必须获得密钥的所有权才能为其设置权限。有很多资源描述了如何获得 regkey 的所有权并为其设置权限,所以我不会在这里详细介绍。
一旦您拥有对密钥的完全控制权限,值可能会简单地显示在屏幕的右侧。这意味着它只是一个权限问题。
如果这些值仍未出现,下一步将验证该文件夹或文件夹中sqlncli.dll
是否存在该值(对于 64 位系统)。如果它不存在,您将必须从另一台 PC 获取副本,确保您从中检索它的 PC 与丢失文件的 PC 具有相同的操作系统。Windows\System32
Windows\SysWow64
如果文件存在,请检查文件的版本。SQL 2005 使用版本 9.00.4035.00。如果没有列出该文件的版本,则它已损坏,您将需要从另一台 PC 中提取副本。
如果文件存在并且列出了版本,请使用 regsvr32 从命令行手动注册它。
Windows 64 位上有 2 个 ODBC 驱动程序管理器。我怀疑你用错了。您需要确定您的 xampp 是 32 位还是 64 位,然后您需要在正确的 ODBC 管理器中定义 DSN。请参阅64-bit ODBC,它详细解释了这一切。
也许您没有明确说明的驱动程序 :) 下载 x32 和 x64。- 这里
https://www.microsoft.com/en-us/download/details.aspx?id=13255
欢迎。
我只花了半天时间解决这个问题,终于弄明白了——至少就我的情况而言。我知道这个线程有点旧,但它仍然是相关的。
您需要确保 osql.exe 的版本与您使用的本机客户端的版本相匹配。我有 2005 年的 osql.exe 和 2008 R2 的本机客户端。一旦我使用了'08 R2 osql.exe,一切都按预期工作。