尝试通过 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) on Linux (Ubuntu 18.04.5 LTS)如果您想继续走这条路,我们需要更多信息。您的freetds.conf
中有什么内容?您可以使用telnet mssql.myhost.com 1433
从您尝试安装 FreeTDS 的机器连接到您的 SQL Server 吗?
但是,我发现避免使用freetds.conf
和odbc.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