Sql server 在Ubuntu/Visual Studio代码上从.Net内核连接到SqlServer

Sql server 在Ubuntu/Visual Studio代码上从.Net内核连接到SqlServer,sql-server,ubuntu,visual-studio-code,.net-core,Sql Server,Ubuntu,Visual Studio Code,.net Core,我有一个控制台应用程序,它连接到SQL Server DB(托管在同一网络中的专用win机器上),用.Net内核编写(使用Visual Studio代码),并且在Windows上运行良好 运行在Ubuntu上Visual Studio代码的代码库无法连接到SQL Server实例,表示找不到服务器 我可以ping SQL Server IP并从中获得响应 我还可以使用1433端口上的telnet连接到SQLServer实例 此外,我还按照建议从nuget中提取了System.Data.Commo

我有一个控制台应用程序,它连接到SQL Server DB(托管在同一网络中的专用win机器上),用.Net内核编写(使用Visual Studio代码),并且在Windows上运行良好

运行在Ubuntu上Visual Studio代码的代码库无法连接到SQL Server实例,表示找不到服务器

我可以ping SQL Server IP并从中获得响应

我还可以使用1433端口上的telnet连接到SQLServer实例

此外,我还按照建议从nuget中提取了System.Data.Common和System.Data.SqlClient,并在连接字符串中设置了MultipleActiveResultSets=False

为了完整起见,这是尝试连接的代码:

var connection = new SqlConnection(myConnectionString);
connection.Open();
这是stacktrace:

Unhandled Exception: System.Data.SqlClient.SqlException: A network-related or instance-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: 35 - An internal exception was caught) ---> System.AggregateException: One or more errors occurred. (No such device or address) ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: No such device or address
   at System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
   at System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult)
   at System.Net.Dns.<>c.<GetHostAddressesAsync>b__14_1(IAsyncResult asyncResult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Data.SqlClient.SNI.SNITCPHandle.<ConnectAsync>d__22.MoveNext()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait(TimeSpan timeout)
   at System.Data.SqlClient.SNI.SNITCPHandle..ctor(String serverName, Int32 port, Int64 timerExpire, Object callbackObject, Boolean parallel)
   --- End of inner exception stack trace ---
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.Open()
未处理的异常:System.Data.SqlClient.SqlException:与SQL Server建立连接时发生网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:TCP提供程序,错误:35-捕获到内部异常)--->System.AggregateException:发生一个或多个错误。(无此类设备或地址)--->System.Net.Internals.SocketExceptionFactory+ExtendedSocketException:无此类设备或地址
位于System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
位于System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult)
在System.Net.Dns.c.b_14_1(IAsyncResult asyncResult)
在System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar、Func`2 endFunction、Action`1 endAction、Task`1 Promission、Boolean requiresSynchronization)
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Data.SqlClient.SNI.SNITCPHandle.d_u22.MoveNext()中
---内部异常堆栈跟踪的结束---
位于System.Threading.Tasks.Task.ThrowifeException(布尔值IncludeTaskCanceledException)
在System.Threading.Tasks.Task.Wait(Int32毫秒计时,CancellationToken CancellationToken)
位于System.Threading.Tasks.Task.Wait(TimeSpan超时)
位于System.Data.SqlClient.SNI.SNITCPHandle..ctor(字符串服务器名、Int32端口、Int64 TimerSpire、对象回调对象、布尔并行)
---内部异常堆栈跟踪的结束---
位于System.Data.SqlClient.SqlInternalConnectionDS..ctor(DbConnectionPoolIdentity,SqlConnectionString connectionOptions,Object providerInfo,Boolean redirectedUserInstance,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,Boolean applyTransientFaultHandling)
位于System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions、DbConnectionPoolKey、Object poolGroupProviderInfo、DbConnectionPool、DBConnectionOwningConnection、DbConnectionOptions用户选项)
位于System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool池、DbConnectionOwningObject、DbConnectionOptions选项、DbConnectionPoolKey池键、DbConnectionOptions用户选项)
位于System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection-owningObject、DbConnectionOptions-userOptions、DbConnectionInternal-oldConnection)
位于System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject、DbConnectionOptions userOptions、DbConnectionInternal oldConnection)
位于System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject、UInt32 waitForMultipleObjectsTimeout、Boolean allowCreate、Boolean OnlyOnEckConnection、DbConnectionOptions userOptions、DbConnectionInternal和connection)
位于System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject、TaskCompletionSource`1重试、DbConnectionOptions用户选项、DbConnectionInternal和connection)
位于System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection、TaskCompletionSource`1重试、DbConnectionOptions用户选项、DbConnectionInternal oldConnection、DbConnectionInternal&connection)
位于System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection、DbConnectionFactory connectionFactory、TaskCompletionSource`1重试,DbConnectionOptions用户选项)
位于System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1重试)
在System.Data.SqlClient.SqlConnection.Open()处
有什么想法吗


显然,感谢您,因为SQL server出现在您的windows计算机上,而在您的Ubuntu计算机上却没有。而且它不能安装在Ubuntu机器上。即使出于测试目的,您也必须将其托管在db服务器上,并将连接字符串指向该服务器

编辑

尝试确保数据库服务器的防火墙没有阻止访问。即使在同一台pc上有双引导,它们仍然是两台不同的计算机

我发现了这个问题,它已经作为一个问题在CORECRL回购协议中提出。问题是我连接的SQLServer实例版本。它是2008r2 SP1,.net核心sql客户端无法连接到它。升级到SP3可以修复它


很抱歉,我应该指定。我已经连接到远程托管的DB服务器(仍然在LAN和专用win机器上)。正如我在问题中提到的,我可以ping SQL Server机器,并从中得到响应。然后检查您的db Server防火墙规则。从Ubuntu连接时,为什么要更改这些规则?在Windows上运行应用程序时,我可以从计算机连接。(我的机器上有双引导)尝试将telnet/ssh连接到端口1433。这是SQL Server使用的端口,请查看是否可以成功连接。如果