C# 无法从netcoreapp1.1连接到命名实例Sql Server(12.0.4457.0)

C# 无法从netcoreapp1.1连接到命名实例Sql Server(12.0.4457.0),c#,sql-server,ubuntu-14.04,.net-core,named-instance,C#,Sql Server,Ubuntu 14.04,.net Core,Named Instance,因此,我在使用DotnetCore1.1从ubuntu 14.0.4连接sql server时遇到问题。它是一个类似于ipaddress\nameofinstance的sql实例,省略nameofinstance会导致您找到另一个sql server实例 代码: 堆栈跟踪: System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a c

因此,我在使用DotnetCore1.1从ubuntu 14.0.4连接sql server时遇到问题。它是一个类似于ipaddress\nameofinstance的sql实例,省略nameofinstance会导致您找到另一个sql server实例

代码:

堆栈跟踪:

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.ExceptionServices.ExceptionDispatchInfo.Throw()
   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()
   at Shared.DataLayer.Db.SetStatus(Int64 id, LRStatus status, Boolean increment) in /home/name/Github/sln/Shared/DataLayer/Db.cs:line 41
   at Worker.Automata.Automata.OnTransitionedAction(Transition transition) in /home/name/Github/sln/Worker/Automata/Automata.cs:line 307
   at Stateless.StateMachine`2.InternalFireOne(TTrigger trigger, Object[] args)
   at Stateless.StateMachine`2.InternalFire(TTrigger trigger, Object[] args)
   at Worker.Automata.Automata.Start(LRStaging job) in /home/name/Github/sln/Worker/Automata/Automata.cs:line 95
   at Worker.Program.processJob(Object sender, BasicDeliverEventArgs e) in /home/name/Github/sln/Worker/Program.cs:line 98
ClientConnectionId:00000000-0000-0000-0000-000000000000

您是否尝试从Ubunutu ping SQL server或尝试从Ubunutu telnet到SQL端口?此外,为了测试用户名/pwd,您可以尝试使用一些sql工具从ubunutu连接到sql实例。如果其中任何一个都不起作用,那么您必须正确配置防火墙或sql。我可以ping ip地址,但不能ping整个路径。这正常吗?我试着把它挂断。仅供参考,我还可以在ip处连接到实例,而不是ip\\otherinstance.Failed:telnet 255.255.255/instancename:1443 telnet:无法解析255.255.255.255/instancename:1443/telnet:名称或服务未知。由于ping正在工作,我认为您无法远程登录到实例。因此,具有实例名称的telnet将无法工作。也试试这个。我如何找出一个命名实例正在侦听的端口呢。在连接时,似乎无法从SSM中找到答案。
Data Source=255.255.255.255\\nameofinstance;User Id=UserName;Password=Password;Initial Catalog=DatabaseOne;MultipleActiveResultSets=True;
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.ExceptionServices.ExceptionDispatchInfo.Throw()
   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()
   at Shared.DataLayer.Db.SetStatus(Int64 id, LRStatus status, Boolean increment) in /home/name/Github/sln/Shared/DataLayer/Db.cs:line 41
   at Worker.Automata.Automata.OnTransitionedAction(Transition transition) in /home/name/Github/sln/Worker/Automata/Automata.cs:line 307
   at Stateless.StateMachine`2.InternalFireOne(TTrigger trigger, Object[] args)
   at Stateless.StateMachine`2.InternalFire(TTrigger trigger, Object[] args)
   at Worker.Automata.Automata.Start(LRStaging job) in /home/name/Github/sln/Worker/Automata/Automata.cs:line 95
   at Worker.Program.processJob(Object sender, BasicDeliverEventArgs e) in /home/name/Github/sln/Worker/Program.cs:line 98
ClientConnectionId:00000000-0000-0000-0000-000000000000
package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/denisenkom/go-mssqldb"
)

func main() {
    connString := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s", "255.255.255.255\\instance", "user", "password", "database")
    fmt.Printf(" connString:%s\n", connString)
    db, err := sql.Open("mssql", connString)
    if err != nil {
        log.Print("Open error")
        log.Print(err.Error())
    }
    defer db.Close()
    perr := db.Ping()
    if perr == nil {
        log.Print("No error")
    } else {
        log.Print("Ping error")
        log.Print(perr.Error())
    }

    rows, err := db.Query("using IQDataOps; exec usp_GetMachineKeyValue ?, ?", "Machine1", "key")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()
    var Value string
    for rows.Next() {
        err := rows.Scan(&Value)
        if err != nil {
            log.Fatal(err)
        }
        log.Println(Value)
    }
    log.Print("Complete")
}