#!/usr/bin/env python # -*- coding: utf-8 -*- """ 测试打包后的SQL Server连接 在打包后的exe中运行此脚本来诊断SQL Server连接问题 """ import sys import os print("=" * 80) print("SQL Server 连接诊断工具") print("=" * 80) print() # 检查运行环境 if getattr(sys, 'frozen', False): print("✓ 运行在打包后的环境中") print(f" 基础路径: {sys._MEIPASS}") else: print("✓ 运行在开发环境中") print(f" 当前路径: {os.getcwd()}") print() # 测试pymssql print("-" * 80) print("测试 pymssql") print("-" * 80) try: import pymssql print("✓ pymssql 导入成功") print(f" 版本: {pymssql.__version__}") print(f" 路径: {pymssql.__file__}") # 检查_mssql模块 try: import _mssql print("✓ _mssql 模块导入成功") except Exception as e: print(f"✗ _mssql 模块导入失败: {e}") except Exception as e: print(f"✗ pymssql 导入失败: {e}") import traceback traceback.print_exc() print() # 测试pyodbc print("-" * 80) print("测试 pyodbc") print("-" * 80) try: import pyodbc print("✓ pyodbc 导入成功") print(f" 版本: {pyodbc.version}") print(f" 路径: {pyodbc.__file__}") # 列出可用的ODBC驱动 try: drivers = pyodbc.drivers() print(f"✓ 可用的ODBC驱动 ({len(drivers)}个):") for driver in drivers: print(f" - {driver}") except Exception as e: print(f"✗ 无法列出ODBC驱动: {e}") except Exception as e: print(f"✗ pyodbc 导入失败: {e}") import traceback traceback.print_exc() print() # 测试连接(如果提供了连接信息) print("-" * 80) print("测试实际连接") print("-" * 80) print("请输入SQL Server连接信息(直接回车跳过):") print() server = input("服务器地址 (例如: localhost 或 192.168.1.100): ").strip() if server: database = input("数据库名称: ").strip() username = input("用户名: ").strip() password = input("密码: ").strip() print() print("尝试使用 pymssql 连接...") try: conn = pymssql.connect( server=server, database=database, user=username, password=password, timeout=5 ) print("✓ pymssql 连接成功!") conn.close() except Exception as e: print(f"✗ pymssql 连接失败: {e}") print() print("尝试使用 pyodbc 连接...") try: # 尝试不同的驱动 drivers_to_try = [ "ODBC Driver 17 for SQL Server", "ODBC Driver 18 for SQL Server", "SQL Server Native Client 11.0", "SQL Server" ] connected = False for driver in drivers_to_try: try: conn_str = ( f"DRIVER={{{driver}}};" f"SERVER={server};" f"DATABASE={database};" f"UID={username};" f"PWD={password};" "TrustServerCertificate=yes;" ) conn = pyodbc.connect(conn_str, timeout=5) print(f"✓ pyodbc 连接成功!使用驱动: {driver}") conn.close() connected = True break except Exception as e: print(f" 尝试驱动 '{driver}' 失败: {e}") if not connected: print("✗ pyodbc 所有驱动都连接失败") except Exception as e: print(f"✗ pyodbc 连接失败: {e}") else: print("跳过连接测试") print() print("=" * 80) print("诊断完成") print("=" * 80) print() # 如果在打包环境中,等待用户按键 if getattr(sys, 'frozen', False): input("按回车键退出...")