SqlConnection 在 .NET Core 3.1 上打开失败,在 4.6.1 Framework 上打开成功

SqlConnection Fails to Open on .NET Core 3.1 but Succeeds on 4.6.1 Framework

我创建了两个示例 C# 控制台应用程序,一个 运行ning 在 .NET Framework 4.6.1 上,另一个 运行ning .NET Core 3.1。两个应用都与 Program.cs 的以下代码相同:

using System;
using Microsoft.Data.SqlClient;

namespace DBConnectTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string connStr;
            Console.WriteLine("Type Connection String: ");
            connStr = Console.ReadLine();

            using (SqlConnection connection = new SqlConnection(connStr))
            {
                SqlCommand sqlCommand = new SqlCommand("SELECT 'Hello' UNION SELECT 'World';", connection);
                sqlCommand.Connection.Open();
                sqlCommand.ExecuteNonQuery();
            }

            Console.WriteLine("Succeeded! Done.");
            Console.Read();
        }
    }
}

注意 1:为了保持一致性,我在两个项目上都使用了 nuget 包 Microsoft.Data.SqlClient。

对于输入,我会 copy/paste 一个连接字符串。示例:

Data Source=UATSOMEENV01;Initial Catalog=SomeDB_Name;Persist Security Info=True;Integrated Security=SSPI;App=SampleApp

注意 2:SQL 服务器不是本地服务器 运行 应用程序。

这里是有趣的地方。我 运行 .NET Framework 4.6.1 App 可执行文件,它可以很好地连接到数据库。 但是,当我 运行 .NET Core 3.1 App 可执行文件时,它无法打开与数据库的连接。这是错误消息:

Core-Error-JPEG

我在互联网上阅读了很多关于连接数据库的其他问题,但似乎始终无法正确获取连接字符串。在这种情况下,我知道它是正确的,因为它适用于 4.6.1(除非 .NET Core 期望它不同)。

其他值得注意的项目:

Data Source=localhost;Initial Catalog=SomeDB_Name;Persist Security Info=True;Integrated Security=SSPI;App=SampleApp

如有任何帮助,我们将不胜感激。提前致谢!

检查您的 sql 客户端版本与 .NET 3.1 的兼容性 那里一定有问题。 您需要更旧的 sql 连接客户端才能匹配您的 .NET 核心 3.1

经过一些调查和阅读,我发现我必须在连接字符串中添加一个端口号才能使其正常工作。从以前开始,但没有用:

Data Source=UATSOMEENV01;Initial Catalog=SomeDB_Name;Persist Security Info=True;Integrated Security=SSPI;App=SampleApp

工作连接字符串:

Data Source=UATSOMEENV01,6000;Initial Catalog=SomeDB_Name;Persist Security Info=True;Integrated Security=SSPI;App=SampleApp

如果您不确定要使用哪个端口号,请尝试 6000 或 1433 - 如果没有另外设置,这些似乎是常用端口号。如果这些都不起作用,请尝试以下步骤来验证您的数据库正在使用哪个端口号:

  • 打开SQL服务器配置管理器(在数据库所在的SQL服务器上)。
  • 左窗格,展开SQL服务器网络配置
  • Select MSSQLSERVER 协议。您的 SQL 服务器名称可能不同。
  • 右窗格,right-click 在 TCP/IP 和 select Properties.
  • 转到 IP 地址 选项卡并滚动到底部。
  • IPAll下,您要查找的端口号是TCP端口.
  • 的值

一些有用的进一步阅读链接:

Unable to create connectionstring for a remote desktop for a C# application