尝试通过 tsql (OS X) 连接到服务器时出现错误 20002

Posted

技术标签:

【中文标题】尝试通过 tsql (OS X) 连接到服务器时出现错误 20002【英文标题】:Error 20002 while trying to connect to a server through tsql (OS X) 【发布时间】:2021-04-22 05:30:22 【问题描述】:

我一直在使用本指南通过 pyodbc 连接到数据库:https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Mac-OSX

我的配置文件看起来像这样,与教程并行: 在 freetds.conf 中:

[MYMSSQL]
host = localhost
port = 1433
tds version = 7.3

在 odbc.ini 中:

[MYMSSQL]
Description         = Testing SQLServer
Driver              = FreeTDS
Servername          = MYMSSQL

在 odbcinst.ini 中:

[FreeTDS]
   Description=FreeTDS Driver for Linux & MSSQL
   Driver=/usr/local/lib/libtdsodbc.so
   Setup=/usr/local/lib/libtdsodbc.so
   UsageCount=1

当我使用“tsql -S MYMSSQL -U myuser -P mypassword”测试连接时,出现错误:

Error 20002 (severity 9):
    Adaptive Server connection failed
There was a problem connecting to the server

同样,“isql MYMSSQL myuser mypassword”也会返回错误:

[ISQL]ERROR: Could not SQLConnect

编辑:在查询控制台中:

“SELECT @@SERVERNAME”返回“4a70ffff1294”

“SELECT @@SERVICENAME”返回“MSSQLSERVER”

“SELECT @@VERSION”返回“Microsoft SQL Server 2019 (RTM-CU8) (KB4577194) - 15.0.4073.23 (X64)”

tsql -S MYMSSQL

返回

locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20002 (severity 9):
    Adaptive Server connection failed
There was a problem connecting to the server

服务器在 docker 镜像中运行。我可以通过 pycharm 的数据库工具使用 1433 端口和相关密码连接到它。可悲的是,我在管理服务器方面不是很有经验。非常感谢所有帮助。

【问题讨论】:

您尝试连接到哪个版本的 SQL Server? TDS 7.3 版仅与不再受支持的 SQL Server 2008 相关。对于 SQL Server 2012 及更高版本,您可能希望至少使用 TDS 7.4 版。 TDS 7.1、7.2、7.3 和 7.4 将适用于 SQL Server 2008+,只是不具备所有最新功能。他的 FreeTDS 版本可能不支持 7.4。 "SELECT @@VERSION" 查询控制台上的命令返回“Microsoft SQL Server 2019 (RTM-CU8) (KB4577194) - 15.0.4073.23 (X64) Sep 23 2020 16:03:08 Copyright ( C) 2019 Microsoft Corporation Developer Edition (64-bit) o​​n Linux (Ubuntu 18.04.5 LTS) " 【参考方案1】:

如果您想继续走这条路,我们需要更多信息。您的freetds.conf 中有什么内容?您可以使用telnet mssql.myhost.com 1433 从您尝试安装 FreeTDS 的机器连接到您的 SQL Server 吗?

但是,我发现避免使用freetds.confodbc.ini 会更容易,而只需将所有内容都保存在 Python 中。只要你正确配置了odbcinst.ini,你应该可以做这样的事情:

import pyodbc

con = pyodbc.connect(
    "DRIVER=FreeTDS;"
    "SERVER=mssql.yourserver.com;"
    "PORT=1433;"
    "DATABASE=your_db;"
    "UID=your_user;"
    "PWD=your_pass;"
    "TDS_Version=7.3;"
)
cursor = conn.cursor()

cursor.execute("SELECT 1")

for row in cursor.fetchall():
    print(row)

祝你好运!

【讨论】:

conn = pyodbc.connect("DRIVER=FreeTDS;" "SERVER=MYMSSQL;" "PORT=1433;" "DATABASE=ArtGallery;" "UID=SA;" "PWD=4916Hyperbolic *;" "TDS_Version=7.3;" ) 返回:pyodbc.OperationalError: ('08001', '[08001] [FreeTDS][SQL Server]无法连接到数据源 (0) (SQLDriverConnect)') 使用完全限定域名,而不是 MYMSSQL - 例如,mssql.myserver.com。或者一个IP地址。另外,当您尝试对您的 MSSQL 主机使用telnet mssql.myhost.com 1433 命令时会发生什么?它是连接,还是只是挂起尝试? 我已将 "SERVER=MYMSSQL;" 替换为 "SERVER=178.241.125.37;" 这是我的 IP 地址。现在它变得反应迟钝。我猜它试图等待服务器的回答? 非常感谢您抽出宝贵的时间顺便说一句_

以上是关于尝试通过 tsql (OS X) 连接到服务器时出现错误 20002的主要内容,如果未能解决你的问题,请参考以下文章

通过蓝牙将 Android 应用程序连接到 Mac OS X 上的 Python 脚本

尝试连接到 gmail IMAP 服务器时出现 javax.mail.MessagingException

尝试通过 docker-compose 将 NodeJS 应用程序连接到 MySQL 映像时出现 ECONNREFUSED

尝试将客户端连接到服务器时出现Node.js Socket.io错误

尝试通过 SSH 连接到系统时出现延迟

连接到 Jack 服务器时出现错误“SSL 错误”重建 android 代码。尝试“千斤顶诊断”