【问题标题】:.NET Core app cannot connect to SQLServer but .Net 4.8 app Can. Why?.NET Core 应用程序无法连接到 SQLServer,但 .Net 4.8 应用程序可以。为什么?
【发布时间】:2020-08-11 13:46:14
【问题描述】:

关于这个的帖子有很多,我都读过了。

SQL Server 位于远程计算机上。我通过服务器资源管理器和 SSMS 连接到 SQL Server。我知道服务器已启动、响应迅速并允许远程连接。 Image of VS Server Explorer connected to SQLServer

我有一个 .NET Framework 4.8 应用程序,它能够按预期连接到服务器实例:

using (System.Data.SqlClient.SqlConnection con = 
                new System.Data.SqlClient.SqlConnection(@"Server=192.168.10.11\vtdwprod;UID=xxxxxxx;Password=xxxxxxx;"))
            {
                con.Open();
                Console.WriteLine("Connected successfully.");
            }

.NET Core 3.1 应用中的相同代码无法连接并报告网络错误。

using (Microsoft.Data.SqlClient.SqlConnection con =new SqlConnection(@"Server=192.168.10.11\vtdwprod;UID=xxxxx;Password=xxxxx;"))
           {
               con.Open();
               Console.WriteLine("Connected successfully.");
           }

我在 .NET Core 应用上尝试过 System.Data 和 Microsoft.Data 库,但无法成功连接。

【问题讨论】:

  • 你能把你的代码贴在这里吗?
  • 从 SQL 日志中验证命名实例当前使用的端口,并尝试直接连接到该端口,而不使用实例名称。例如,.NET FX 和 .NET Core 上的 Server=tcp:192.168.10.11,38721。还要确保 SQL Browser 服务正在运行并且 UDP 端口 1434 未被阻塞。
  • 好的,与 tcp:, 连接成功。为什么 .NET Core 应用无法根据 DNS 主机名、IP 地址或实例名称正确路由我的连接?
  • 实例名称到端口的解析需要 SQL Browser 服务。因此,可能两者都无法访问浏览器,但 .NET Framework 以某种方式转向命名管道,或者配置了客户端别名。或者浏览器可能只能访问 IPv4 或只能访问 IPv6。
  • 无论如何要继续使用该端口,请在 SQL Server 配置管理器中设置实例使用固定端口。

标签: c# sql-server c#-4.0 .net-core


【解决方案1】:

尝试添加 Nuget 包 System.Data.SqlClient 4.8.0

然后使用

System.Data.SqlClient.SqlConnection

【讨论】:

  • 感谢您的建议,但仍然没有运气。安装 System.Data.SqlClient 4.8.0 并更改为 System.Data。结果相同。
【解决方案2】:

在不知道您遇到什么错误的情况下很难给您答案。尝试其中一种

  1. 如果问题是您输入了错误的密码,那么这可能就是问题所在。

    • 将文件的编码改为UTF-8
  2. 尝试指定sql server端口

    • Server=serveraddress,1433;Initial Catalog=DBName;UID=UserName;Password=pass;"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2021-05-13
    相关资源
    最近更新 更多