Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用System.Data.SqlClient 4.4.3和主机名连接到sql数据库,但ip有效_C#_Docker_Asp.net Core_Database Connection_Sqlclient - Fatal编程技术网

C# 无法使用System.Data.SqlClient 4.4.3和主机名连接到sql数据库,但ip有效

C# 无法使用System.Data.SqlClient 4.4.3和主机名连接到sql数据库,但ip有效,c#,docker,asp.net-core,database-connection,sqlclient,C#,Docker,Asp.net Core,Database Connection,Sqlclient,我曾尝试在基于mcr.microsoft.com/dotnet/core/sdk:3.1-bionic(Ubuntu 18.04)的docker容器中的asp.net core 3.1应用程序中运行此功能。还尝试了mcr.microsoft.com/dotnet/core/sdk:3.1-buster。 我正在尝试使用以下代码连接到数据库: using var connection = new SqlConnection(connectionString); connection.Open();

我曾尝试在基于mcr.microsoft.com/dotnet/core/sdk:3.1-bionic(Ubuntu 18.04)的docker容器中的asp.net core 3.1应用程序中运行此功能。还尝试了mcr.microsoft.com/dotnet/core/sdk:3.1-buster。

我正在尝试使用以下代码连接到数据库:

using var connection = new SqlConnection(connectionString);
connection.Open();
如果我使用ip地址,它可以正常工作。如果我在docker容器外运行它,它可以正常工作。如果我在容器中运行并使用System.Data.SqlClient 4.4.3或更高版本并使用主机名,则此操作将失败,并出现以下错误:

"Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or in stance-specific error 
occurred while establishing a connection to SQL Server. The server was not found or was not 
accessible. Verify that the instance name is correct and that SQL Server is configured to allow 
remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)" 
我的第一个想法是,这是DNS解析的问题,所以我尝试了
DNS.GetHostAddresses(“myhostname”)但它能够从中解析正确的IP,
所以这似乎不是问题所在。如果我降级到System.Data.SqlClient 4.4.2我的应用程序使用主机名连接到sql server时没有问题。那么,在4.4.3中做了哪些改变,使我有这些问题?我还可以提到,我尝试了以下库:

**Microsoft.Data.SqlClient v2.0.0**,  
**System.Data.SqlClient 4.8.1**,  
**Microsoft.EntityFameworkCore.SqlServer**.  
同样的问题。我尝试在docker容器中使用sqlCmd,但连接没有问题

我用两个不同的数据库在不同的地方进行了尝试,并使用其中一个而不是另一个。我怀疑这不是主机上的软件的实际版本的问题,但发布信息的完整性无论如何。 仅当我使用SqlCLient版本4.4.2时才能使用主机名,ip可以与4.4.3及更高版本一起使用

l Microsoft SQL Server 2016 (SP2-GDR) (KB4532097) - 13.0.5102.14 (X64) 
Dec 31 2019 22:39:35 
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> 
(Build 14393: ) (Hypervisor)

l微软SQL Server 2016(SP2-GDR)(KB4532097)-13.0.5102.14(X64)
2019年12月31日22:39:35
版权所有(c)微软公司
Windows Server 2016数据中心10.0上的企业版(64位)
(构建14393:)(虚拟机监控程序)
无论SqlCLient版本如何,都可以使用主机名

Microsoft SQL Server 2016 (SP2-GDR) (KB4532097) - 13.0.5102.14 (X64)
        Dec 31 2019 22:39:35
        Copyright (c) Microsoft Corporation
        Standard Edition (64-bit) on Windows Server 2012 R2 Datacenter 6.3 <X64>
 (Build 9600: ) (Hypervisor)

Microsoft SQL Server 2016(SP2-GDR)(KB4532097)-13.0.5102.14(X64)
2019年12月31日22:39:35
版权所有(c)微软公司
Windows Server 2012 R2数据中心6.3上的标准版(64位)
(构建9600:)(虚拟机监控程序)
即使服务器端的某些网络配置可能是导致我出现此问题的一个因素,但仍然存在的一个因素是,它与System.Data.SqlClient 4.4.2一起工作,但与该版本以上的任何版本一起失败。我真的很想了解发生了什么。这里有一个最小的项目,可以重现这个问题。非常基本,所以我认为我的代码中没有任何东西是直接的问题。

您的连接字符串是什么?(当然省略了用户/通行证)。。可能是版本发生了变化,我建议查看发行说明。我一直在搜索发行说明,但找不到。你知道它们在哪里吗?你的连接字符串是什么?(当然省略了用户/通行证)。。可能是版本发生了变化,我建议查看发行说明。我一直在搜索发行说明,但找不到。你知道他们在哪里吗?