TDS协议的版本
TDS 4.2 Sybase和微软:在Sybase/Microsoft分裂时使用的版本。
TDS 5.0 Sybase:为Sybase引入的。因为TDS 5.0包括协商功能,通过它可以扩展协议功能,我们不太可能看到Sybase的新TDS版本。
TDS 7.0 微软:为SQL Server 7.0引入的。包括对SQL Server 7.0中的扩展数据类型的支持(如超过255个字符的char/varchar字段)。它还包括对Unicode的支持。
TDS 7.1: Microsoft,原为8.0。 为SQL Server 2000引入。包括对大整数(64位int)和 "变体 "数据类型的支持。
TDS 7.2 Microsoft, 原为 9.0,为SQL Server 2005引入。包括对varchar(max), varbinary(max), xml数据类型和MARS的支持。
TDS 7.3:Microsoft, 为SQL Server 2008引入的。包括支持扩展日期/时间,表作为参数。
TDS 7.4:Microsoft, 为SQL Server 2012引入的。包括对会话恢复的支持。
正常运行后, 中途手工关闭服务器, 得到的错误是 20047
pymssql._mssql.MSSQLDatabaseException: (20047, b'DB-Lib error message 20047, severity 9:\nDBPROCESS is dead or not enabled\n')
服务器没开, 找不到服务器或者服务器的路由, 得到的错误是 20009
pymssql._mssql.MSSQLDatabaseException: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (http://10.150.xxx.xxx)\n Net-Lib error during No route to host (113)\n')
最后,还是考虑TDS协议的版本问题。
TDS 4.2/5.0/7.0 还没有尝试。
尽管 TDS 7.4/7.3/7.2/7.1 都试过了。
再试几次吧。
mssql2k0=pymssql.connect(host="10.xxx.yyy.zzz",user="sa",password="your_pwd", database="mwx_char", as_dict=True, tds_version="7.0")
mssql2k0=pymssql.connect(host="10.xxx.yyy.zzz",user="sa",password="your_pwd", database="mwx_char", as_dict=True, tds_version="5.0")
mssql2k0=pymssql.connect(host="10.xxx.yyy.zzz",user="sa",password="your_pwd", database="mwx_char", as_dict=True, tds_version="4.2")
ENTER 刚按下, 熟悉的连接画面出现了。
隧道的尽头的光终于出现了。
是的, MSSQLSERVER 2008 和 MSSQLSERVER 2012 您要用 tds_version="7.0"。
不是 tds_version= 7.0 , 而是 tds_version="7.0",
也不是 tds_version="10.0",tds_version="9.0",tds_version="8.0",tds_version="7.3", tds_version="7.2",tds_version="7.1"。
重要的来说, 连接2008R2 以上的, 都必须要加上TDS的版本号, 如下图:
tds_version="7.0"
# 连接参数 server = 'xxx' port = 'xxx' database = 'xxx' username = 'xx' password = 'xxx' # 建立连接 conn = pymssql.connect(server=server, database=database, user=username, password=password, port=port,tds_version="7.0") # 创建游标对象 cursor = conn.cursor()
本文为宁若水!原创文章,转载无需和我联系,但请注明来自[若水]博客 www.lalaya.net