我在 ubuntu 16.04 LTS 中通过 odbc 连接 mssql 数据库时遇到问题。我已经安装了 unix odbc 和 mussel 驱动程序。

mssql 驱动程序在 odbcinst.ini 中声明:

statadmin@dsc-stat:~$ cat /etc/odbcinst.ini [SQL Server 的 ODBC 驱动程序 13] 说明=SQL Server 的 Microsoft ODBC 驱动程序 13 驱动程序=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.1.0 UsageCount=1

我的 DSN 名为 DW16 位于 odbc.ini 中:

statadmin@dsc-stat:~$ cat /etc/odbc.ini [DW16] 驱动程序=SQL Server 的 ODBC 驱动程序 13 服务器名称=10.0.0.52 端口=1433

数据库上的直接连接(无需 DSN)有效:

statadmin@dsc-stat:~$ sqlcmd -S dsc-bdd1.dscptl.loc -U statsql 密码: 1> 从默认值中选择前 5 个 libdef 2> ; 3> GO

库定义

DEFAUT PONCTUEL SUREPAISSEUR PLIS CASSES TISSAGE FIL TIRANT FIL (受影响 5 行)

但是使用 DSN 时出现错误:

statadmin@dsc-stat:~$ sqlcmd -D -S DW16 -U statsql 密码: Sqlcmd:错误:SQL Server 的 Microsoft ODBC 驱动程序 13:登录超时已过期。 Sqlcmd:错误:SQL Server 的 Microsoft ODBC 驱动程序 13:TCP 提供程序:错误代码 0x2AFA。 Sqlcmd:错误:SQL Server 的 Microsoft ODBC 驱动程序 13:与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。 找不到服务器或无法访问服务器。 检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 有关更多信息,请参阅 SQL Server 联机丛书。

我猜想防火墙、tcp porter 身份验证问题不存在,因为直接连接有效。我尝试过使用 IP 地址以及服务器名称,但没有任何区别。

希望这里有人能有一个好主意来帮助我。

托马斯

答案1

终于得到了答案,我不知道我的同事在哪里找到答案,但是他发给我的是:

[MSSQLTest] 驱动程序 = SQL Server 的 ODBC 驱动程序 11 服务器 = [协议:]服务器[,端口]

笔记:

端口不是 ~/.odbc.ini 文件中的有效关键字

适用于 Linux 上的 Microsoft ODBC 驱动程序

您可以选择指定连接到服务器的协议和端口。

例如,服务器 = tcp:servername,12345。

要连接到静态端口上的命名实例,请使用 Server = servername,port_number。不支持连接到动态端口。

我的 odbc.ini 需要:

[DW16] 
Driver=ODBC Driver 13 for SQL Server 
Server=TCP:dsc-bdd1.dscptl.loc,1433

它也适用于 IP 地址。希望它能帮助其他人。

托马斯

相关内容