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


30

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

这是怎么回事。我有一台服务器,我称之为服务器,MYSERVER运行Microsoft SQL Server Express2005。就在这台服务器本身上,我已经建立了一个指向自身的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.

如果我尝试相同的操作,但是将“服务器”从更改为123.456.789.012\SQLEXPRESS普通旧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.

现在我知道你在想什么。您可能会想,“ du,您可能没有打开虚拟端口1433的防火墙。” 除非我这样做,并且我验证了这一点,否则我可以成功运行:

telnet 123.456.789.012 1433

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

Answers:


18

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

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


9
我接受您的回答,因为它使我步入正轨。在SQL Server配置管理器中,“ SQL Server 2005网络配置> SQLEXPRESS的协议”和“ SQL本机客户端配置>客户端协议”一直启用TCP / IP。后者已启用了命名管道。我在前者中启用了它,但是似乎没有帮助(相同的错误消息)。最后,我将ODBC源切换为使用“ SQL Native Client”驱动程序而不是“ SQL Server”驱动程序,并且最终DID起作用。
soapergem

谢谢SoaperGEM!我从未想过尝试过SQL Native Client!像魅力一样工作!
菲利普·森

5

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

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


与本地服务器/实例连接是否使用与远程使用不同的机制?
山姆

@Sam看到Hakan Winther的答案。
Sim

4

使用Access连接到MSSQL 2008服务器时,该线程为我修复了相同的错误消息。仅在连接字符串中使用计算机名称的情况下,MSSQL 2005和更早版本才能正常工作,但是当实例升级到2008时,我不得不在Access to full form中更改为连接字符串:

servername\instancename,portnumber


2
这样做对我有用,除了我不需要端口号。
bgmCoder

2

我遇到了同样的问题,并设法通过将SQL驱动程序更改为SQL Native Client驱动程序来解决它。这很奇怪,因为就我而言,这已经运行了好几年,然后才停止工作。我怀疑这可能是驱动程序损坏的原因,也许重新安装MDAC可能会有所帮助,但是暂时我很高兴它可以正常工作!


1

如果服务器名称完全合格,它将识别出服务器名称吗?如果是MYSERVER.domain.com?从其他域连接时,我们必须使用SQL Server进行此操作。如果在测试数据源时可以使ODBC系统DSN连接,那么您正在取得进展。如果在ODBC设置中未连接,则必须首先解决该问题。


这正是我正在尝试做的-在测试数据源时首先要使ODBC System DSN连接。因此,我尝试了您的建议,同时尝试了MYSERVER.domain.com\SQLEXPRESSMYSERVER.domain.com,但是它们都分别给了我上面列出的错误。
soapergem

在另一台计算机上的命令提示符下,键入“ nslookup MYSERVER.domain.com”-解析为正确的IP地址(123.456.789.012)还是根本不正确?
Sim

@Sim-是的,该命令可以正确解析。
soapergem

1

您是否在有效的ODBC连接上使用命名管道或TCP?是否启用TCP?


1

确保已为SQL Server启用了远程tcp connectios。


0

这里只是一个疯狂的镜头,但是如果您在服务器名称或IP地址前加上双反斜杠会发生什么情况?在我看来,大多数其他Windows / Microsoft连接通常都需要它。


尝试双反斜杠会导致相同的1326错误(我列出的第一个错误)。
soapergem

0

我有一个类似的问题。在我的情况下,另一个sw配置ODBC设置,因此我无法更改驱动程序。我这样解决了我的情况:

  1. 设置服务器的TCP / IP设置以使用端口1433
  2. 在客户端上输入服务器地址,例如:192.168.1.5,1433(无实例名称)

然后它开始工作。客户端操作系统:Win7 x64驱动程序:sqlsrv32.dll


0

出于其价值,我开始在以前一直有效的连接上收到此错误。原来,MSSQL $ SQLEXPRESS服务已经以某种方式停止了。重新启动它可以解决问题。


0

我也遇到了这个问题,它很简单:删除了列为该服务器的主要DNS服务器的服务器,该应用程序不再能够正确解析网络上SQL Server的名称。当我将本地DNS服务器更正为可用的DNS服务器后,一切立即又开始工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.