遇到ServerVersion = “conn.ServerVersion”引发了...异常

探讨了从 SQL2005Express 迁移到 SQLServer2008 后出现的 ServerVersion 异常问题及解决办法。通过移除 try...catch 代码块后,程序恢复正常运行。
程序数据库在SQL 2005 Express下做的备份,拿来还原到SQL Server2008后,在新建SqlConnection时出现了ServerVersion = “conn.ServerVersion”引发了“System.InvalidOperationException”类型的异常类型的异常,不能正常运行.把try..catch拿掉后居然没问题了,然后再把try..catch加上,程序仍能正常运行
在当前的 `pymssql` 库中,并没有直接提供查询连接数据库所使用的 TLS 版本的 API。不过可以通过使用 `ssl` 上下文对象结合 `socket` 来获取相关信息。以下是修改后的代码示例,用于尝试获取 TLS 版本: ```python import pymssql import ssl import socket context = ssl.create_default_context() context.minimum_version = ssl.TLSVersion.TLSv1_2 server = 'your_server' user = 'your_user' password = 'your_password' database = 'your_database' # 创建一个普通的 TCP 套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 包装套接字以使用 SSL ssl_sock = context.wrap_socket(sock, server_hostname=server) try: # 连接到数据库服务器 ssl_sock.connect((server, 1433)) # 假设 SQL Server 使用默认端口 1433 # 获取使用的 TLS 版本 tls_version = ssl_sock.version() print(f"使用的 TLS 版本: {tls_version}") # 现在使用 pymssql 通过 SSL 套接字连接到数据库 conn = pymssql.connect(server=server, user=user, password=password, database=database, tds_version='7.0', sock=ssl_sock) cursor = conn.cursor() cursor.execute('SELECT 1') row = cursor.fetchone() print(row) conn.close() except Exception as e: print(f"发生错误: {e}") finally: ssl_sock.close() ``` ### 代码解释 1. **创建 SSL 上下文**:使用 `ssl.create_default_context()` 创建默认的 SSL 上下文,并设置最低的 TLS 版本为 `TLSv1_2`。 2. **创建并包装套接字**:创建一个普通的 TCP 套接字,然后使用 `context.wrap_socket()` 方法将其包装为 SSL 套接字。 3. **连接到服务器**:使用 `ssl_sock.connect()` 方法连接到数据库服务器。 4. **获取 TLS 版本**:使用 `ssl_sock.version()` 方法获取当前连接使用的 TLS 版本。 5. **连接到数据库**:使用 `pymssql.connect()` 方法通过 SSL 套接字连接到数据库,并执行查询操作。 ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值