凌峰创科服务平台

SQL Server网络连接服务器失败怎么办?

连接的基本原理

要理解 SQL Server 网络连接的本质,它不是一个简单的“点击连接”操作,而是一个客户端和服务器之间通过网络协议进行通信的过程。

  1. 客户端: 你的应用程序,SQL Server Management Studio (SSMS)、Visual Studio、Python 脚本、Java 程序等。
  2. 服务器: 运行着 SQL Server 实例的计算机。
  3. 协议: 双方沟通的语言,SQL Server 支持多种网络协议,最常用的是 TCP/IP
  4. 端口号: 服务器上不同的服务通过不同的端口号来区分,SQL Server 默认使用 TCP 1433 端口,如果配置了动态端口,则需要通过 SQL Server Configuration Manager 查询。
  5. 身份验证: 客户端如何证明自己的身份。
    • Windows 身份验证: 使用当前 Windows 用户的登录凭据,这是最安全的方式,因为它不直接传递密码。
    • SQL Server 身份验证: 使用一个在 SQL Server 中创建的“登录名”和“密码”,这种方式更灵活,尤其是在跨平台连接时。

连接字符串:客户端通过一个包含上述所有信息的“连接字符串”来发起连接,它就像一个地址,告诉客户端去哪里以及如何连接。


如何连接到 SQL Server 服务器

这里介绍几种最主流的连接方式。

使用 SQL Server Management Studio (SSMS) - 最常用

SSMS 是微软官方提供的图形化管理工具,是 DBA 和开发人员的首选。

步骤:

  1. 打开 SSMS

    SQL Server网络连接服务器失败怎么办?-图1

  2. 在弹出的“连接到服务器”窗口中,填写以下信息:

    • 服务器类型: 通常默认为“数据库引擎”。
    • 服务器名称: 这是最关键的一步,你需要指定要连接的 SQL Server 实例。
      • 本地默认实例: SQL Server 安装在本地,且是默认实例(名称为 MSSQLSERVER),可以直接输入 、(local)localhost
      • 本地命名实例: 如果是命名实例(SQLEXPRESS),需要输入 计算机名\实例名,如 LAPTOP-ABC\SQLEXPRESS
      • 远程服务器: 如果是远程服务器,输入服务器的 IP 地址或计算机名,如 168.1.100SQL-SERVER-01,如果是命名实例,则为 IP地址\实例名
    • 身份验证:
      • Windows 身份验证: 如果你的 Windows 账户有权限,选择此项最简单安全。
      • SQL Server 身份验证: 选择此项,然后输入你在 SQL Server 中创建的“登录名”和“密码”。
    • 连接: 点击“连接”按钮。
  3. 连接成功后,你将看到“对象资源管理器”窗口,其中显示了该服务器下的所有数据库、对象等。

    SQL Server网络连接服务器失败怎么办?-图2

使用编程语言连接 (以 C# 和 Python 为例)

在应用程序中,你需要构建连接字符串,然后使用相应的数据库驱动来连接。

C# (使用 ADO.NET)

SQL Server网络连接服务器失败怎么办?-图3

你需要先安装 System.Data.SqlClient NuGet 包。

using System;
using System.Data.SqlClient;
class Program
{
    static void Main()
    {
        // 1. 构建连接字符串
        // 服务器名: 服务器地址/实例名; 数据库名: 你要连接的数据库; 用户ID: 你的登录名; Password: 你的密码;
        string connectionString = "Server=192.168.1.100;Database=MyDB;User Id=myuser;Password=mypassword;";
        // 使用 using 语句确保连接和命令对象在使用后被正确关闭和释放
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            try
            {
                // 2. 打开连接
                connection.Open();
                Console.WriteLine("连接成功!");
                // 3. 执行查询
                string sql = "SELECT 'Hello, SQL Server!' AS Greeting";
                using (SqlCommand command = new SqlCommand(sql, connection))
                {
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Console.WriteLine(reader["Greeting"].ToString());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                // 4. 捕获并处理连接错误
                Console.WriteLine("连接失败: " + ex.Message);
            }
        }
    }
}

Python (使用 pyodbc)

你需要先安装 pyodbc 库 (pip install pyodbc)。

import pyodbc
# 1. 构建连接字符串
# 注意:Driver 名称可能因你的 SQL Server 版本和操作系统而异,常见的有 'ODBC Driver 17 for SQL Server', 'SQL Server' 等。
connection_string = (
    "DRIVER={ODBC Driver 17 for SQL Server};"
    "SERVER=192.168.1.100;"
    "DATABASE=MyDB;"
    "UID=myuser;"
    "PWD=mypassword;"
)
try:
    # 2. 建立连接
    conn = pyodbc.connect(connection_string)
    print("连接成功!")
    # 3. 创建游标并执行查询
    cursor = conn.cursor()
    cursor.execute("SELECT 'Hello, SQL Server!' AS Greeting")
    # 4. 获取并打印结果
    for row in cursor:
        print(row.Greeting)
    # 5. 关闭连接
    cursor.close()
    conn.close()
except pyodbc.Error as ex:
    # 6. 捕获并处理连接错误
    sqlstate = ex.args[0]
    error_message = ex.args[1]
    print(f"连接失败: SQLState: {sqlstate}, Message: {error_message}")

常见连接问题及解决方案

连接失败是家常便饭,以下是最常见的问题和排查思路。

问题 1:无法连接到服务器 (最常见)

  • 错误信息: "无法连接到服务器...", "Network-related or instance-specific error..."。
  • 可能原因及解决方案:
    1. 服务器名称错误:
      • 检查: 确认你输入的服务器名、IP 地址或实例名是否完全正确,大小写通常不重要,但斜杠和空格很关键。
      • 解决: 仔细核对,如果不确定实例名,去服务器上打开“SQL Server Configuration Manager”,查看“SQL Server 网络配置”下的协议。
    2. SQL Server 服务未运行:
      • 检查: 在目标服务器上,打开“服务”(Services),找到 SQL Server (SQL Server (MSSQLSERVER)SQL Server (SQLEXPRESS)),确认其状态为“正在运行”。
      • 解决: 右键点击该服务,选择“启动”。
    3. 防火墙阻止了连接:
      • 检查: Windows 防火墙或其他网络安全软件可能阻止了 1433 (或配置的) 端口。
      • 解决:
        • 临时测试: 在服务器上临时关闭防火墙,看是否能连接。
        • 永久解决: 在防火墙入站规则中,新建一个规则,允许 TCP 端口 1433 (或你的 SQL Server 使用的端口) 的流量。注意:这会降低安全性,请确保只允许来自可信 IP 地址的连接。
    4. TCP/IP 协议未启用:
      • 检查: 在服务器的“SQL Server Configuration Manager”中,展开“SQL Server 网络配置”,找到对应实例的“TCP/IP”协议,查看其是否已启用。
      • 解决: 右键点击“TCP/IP”,选择“启用”,然后必须重启 SQL Server 服务才能生效。
    5. SQL Server 使用了动态端口:
      • 检查: TCP/IP 协议已启用,但端口是动态的,你需要知道它实际使用的端口。
      • 解决:
        • 在“SQL Server Configuration Manager”中,双击“TCP/IP”协议。
        • 切换到“IP 地址”选项卡。
        • 查看最下面的“IPAll”部分,找到“TCP 动态端口”。
        • 客户端连接: 在连接字符串中指定该端口,如 Server=192.168.1.100,50001;
        • 服务器端配置 (推荐): 为了方便连接,最好将“TCP 动态端口”清空,然后在“TCP 端口”中指定一个固定端口(如 1433),然后重启服务。

问题 2:登录失败

分享:
扫描分享到社交APP
上一篇
下一篇