如果使用 TCP/IP 以外的协议,则不能连接到除 1433 以外的任何端口上的 SQL Server

本文可帮助你解决在使用 TCP/IP 以外的协议连接到 1433 以外的端口上的 SQL Server 时发生的问题。

原始产品版本: Visual C#
原始 KB 数: 307645

现象

使用传输控制协议/Internet 协议(TCP/IP)以外的协议时, SqlConnection.Open 如果指定了 1433 以外的端口号来连接到 SQL Server 实例,则失败。

解决方法

若要解决此问题,请使用 TCP/IP 协议,并将其包含在Server=ComputerName, PortNumber连接字符串中。

重现行为的步骤

  1. 启动 Visual Studio .NET。

  2. 创建新的 Visual C# .NET 控制台应用程序项目。

  3. 确保项目包含对命名空间的 System.Data 引用,并添加对此命名空间的引用(如果没有)。

  4. System.DataSystem.Data.SqlClient> 命名空间使用 using 语句System,以便你无需在代码后面限定这些命名空间中的声明。

    using System;
    using System.Data;
    using System.Data.SqlClient;
    
  5. 默认情况下,Visual Studio 会创建一个静态类和一个空 Main 过程。 复制以下代码,并将其粘贴到“代码”窗口中:

    注意

    运行此代码之前,必须将值和密码<strong password>值更改为User ID<username>正确的值。 请确保 User ID 具有对数据库执行此操作的适当权限。

    class Class1
    {
        static void Main(string[] args)
        {
            string sConnectionString;
            sConnectionString = "User ID=<username>;Password =<strong password>;Initial Catalog=pubs;Data Source=myServer,1200";
            SqlConnection objConn = new SqlConnection(sConnectionString);
            objConn.Open();
            SqlDataAdapter daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
    
            DataSet dsPubs = new DataSet("Pubs");
            daAuthors.FillSchema(dsPubs, SchemaType.Source, "Authors");
            daAuthors.Fill(dsPubs, "Authors");
            daAuthors.MissingSchemaAction = MissingSchemaAction.AddWithKey;
            daAuthors.Fill(dsPubs, "Authors");
    
            DataTable tblAuthors;
            tblAuthors = dsPubs.Tables["Authors"];
            foreach (DataRow drCurrent in tblAuthors.Rows)
            {
                Console.WriteLine("{0} {1}",
                drCurrent["au_fname"].ToString(),
                drCurrent["au_lname"].ToString());
            }
            Console.ReadLine();
        }
    }
    
  6. sConnectionString根据环境修改字符串。

  7. 保存你的项目。

  8. “调试”菜单上,单击“开始,然后运行项目以连接到数据库。