如何使此 SQL Server ODBC 连接正常工作?

soa*_*gem 31 odbc sql-server

注意:我显然已将服务器名称和 IP 更改为虚构的。

这是发生了什么。我有一台MYSERVER运行 Microsoft SQL Server Express 2005 的服务器。就在这台服务器上,我已经建立了一个指向它自己的 ODBC 连接,它已经完美地工作了。我使用 SQL Server 身份验证(不是 Windows 身份验证)登录,它的设置如下:

良好的 ODBC 连接的图像

就像我说的那样,那个有效。但是接下来,我有另一台位于完全不同域/不在 Intranet 上的计算机,它需要访问托管在 MYSERVER 上的同一个 SQL Server。因为它在不同的域中,所以它不能识别名称“MYSERVER”;我必须将它指向 MYSERVER 的 IP 地址,我们会说它是 123.456.789.012。但是 ODBC 连接似乎在那里不起作用。我试着这样设置:

错误的 ODBC 连接的图像

这不起作用。当我输入用户名和密码并按下一步时,它停顿了 10 到 20 秒,然后最终返回以下错误:

Connection failed:
SQLState: '01000'
SQL Server Error: 1326
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).
Connection failed:
SQLState: '08001'
SQL Server Error: 17
[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.
Run Code Online (Sandbox Code Playgroud)

如果我尝试同样的事情,但将“服务器”从123.456.789.012\SQLEXPRESS简单的更改为old 123.456.789.012,我会收到一个不同的错误:

Connection failed:
SQLState: '01000'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Invalid Instance()).
Connection failed:
SQLState: '08001'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection.
Run Code Online (Sandbox Code Playgroud)

现在我知道你在想什么了。你可能会想,“呃,你可能没有打开 1433 端口的防火墙,傻瓜。” 除了我做到了,并且我验证了这一点,因为我可以成功运行:

telnet 123.456.789.012 1433
Run Code Online (Sandbox Code Playgroud)

...从命令行所有我想要的。所以我不知道该怎么做。我知道 SQL Server 存在,可以工作,并且可以正确设置ODBC 连接;我只是不确定是什么原因导致我的连接设置出错了这些错误。根据我列出的后一个错误,它似乎可以连接到服务器,但根本找不到实例(因为我当时没有指定一个)。那么这是否意味着我只需要使用一些不同的语法来指定 IP 和实例名称?我该怎么办?提前致谢。

Hak*_*her 19

SQL server 2005 的命名管道和 TCIP 协议默认是禁用的。您是否在“SQL 服务器配置管理器”下启用了它们?您可以在 SQL Server 网络配置和 SQL Native client xx 配置下找到这些协议。

由于“共享内存”协议,服务器本身的连接工作正常。

  • 我接受你的回答,因为它让我走上了正确的道路。在 SQL Server 配置管理器下,TCP/IP 已经在“SQL Server 2005 网络配置 > SQLEXPRESS 的协议”和“SQL Native Client 配置 > 客户端协议”下启用。命名管道已经在后者中启用。我在前者中启用了它,但这似乎没有帮助(相同的错误消息)。最后,我将 ODBC 源切换为使用“SQL Native Client”驱动程序而不是“SQL Server”驱动程序,最终 DID 工作。 (9认同)

Sim*_*Sim 6

您是否按照如何配置 SQL Server 2005 以允许远程连接启用SQL Server Browser 服务?:

如果您使用实例名称运行 SQL Server 2005 并且您没有在连接字符串中使用特定的 TCP/IP 端口号,则必须启用 SQL Server Browser 服务以允许远程连接。例如,SQL Server 2005 Express 安装时的默认实例名称为 Computer Name\SQLEXPRESS。


Muf*_*asa 5

当使用 Access 连接到 MSSQL 2008 服务器时,该线程为我修复了相同的错误消息。MSSQL 2005 及更早版本仅使用连接字符串中的计算机名称就可以正常工作,但是当实例升级到 2008 时,我必须将 Access 中的连接字符串更改为完整形式:

servername\instancename,portnumber

  • 对我来说就是这样,除了我不需要端口号。 (2认同)