Ho visto molti post che fanno domande simili, ma nessuno dei quali ha risolto il problema che ho.
La mia configurazione è la seguente:
127.0.0.1:1433
L5000 -> 127.0.0.1:1433
Quando inserisco il nome del server 127.0.0.1,5000
in SQL Management Studio posso connettermi al database che voglio.
Se aggiusto la mia stringa di connessione di conseguenza e avvio la mia applicazione, ottengo la seguente eccezione:
Type : SqlException
Message : 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: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
Source : Core .Net SqlClient Data Provider
HResult : -2146232060
TargetSite : .ctor
----- INNER EXCEPTION -----
Type : Win32Exception
Message : The system cannot find the file specified
HResult : -2147467259
Dal momento che posso collegarmi a Management Studio, presumo che il problema riguardi la mia stringa di connessione o qualcosa relativo a Entity Framework Core. Ecco alcune stringhe di connessione che ho provato con:
Data Source=127.0.0.1,5000;Network Library=DBMSSOCN;Initial Catalog=Mux;Integrated Security=False;Persist Security Info=False;User ID=...;Password=...;MultipleActiveResultSets=True;Connect Timeout=5;Encrypt=True;TrustServerCertificate=True;Application Name=Mux;ConnectRetryCount=3;ConnectRetryInterval=5
Data Source=127.0.0.1;port=5000;Network Library=DBMSSOCN;Initial Catalog=Mux;Integrated Security=False;Persist Security Info=False;User ID=...;Password=...;MultipleActiveResultSets=True;Connect Timeout=5;Encrypt=True;TrustServerCertificate=True;Application Name=Mux;ConnectRetryCount=3;ConnectRetryInterval=5
Server=127.0.0.1;port=5000;Network Library=DBMSSOCN;Initial Catalog=Mux;Integrated Security=False;Persist Security Info=False;User ID=...;Password=...;MultipleActiveResultSets=True;Connect Timeout=5;Encrypt=True;TrustServerCertificate=True;Application Name=Mux;ConnectRetryCount=3;ConnectRetryInterval=5
Server=127.0.0.1,5000;Initial Catalog=Mux;Integrated Security=False;Persist Security Info=False;User ID=...;Password=...;MultipleActiveResultSets=True;Connect Timeout=5;Encrypt=True;TrustServerCertificate=True;Application Name=Mux;ConnectRetryCount=3;ConnectRetryInterval=5
Server=127.0.0.1;port=5000;Initial Catalog=Mux;Integrated Security=False;Persist Security Info=False;User ID=...;Password=...;MultipleActiveResultSets=True;Connect Timeout=5;Encrypt=True;TrustServerCertificate=True;Application Name=Mux;ConnectRetryCount=3;ConnectRetryInterval=5
Server=tcp,127.0.0.1,5000;Initial Catalog=Mux;Integrated Security=False;Persist Security Info=False;User ID=...;Password=...;MultipleActiveResultSets=True;Connect Timeout=5;Encrypt=True;TrustServerCertificate=True;Application Name=Mux;ConnectRetryCount=3;ConnectRetryInterval=5
Qualcuno ha un'idea del perché sia così?
Modifica 1 Ho effettuato altri test; SQL Server Profiler non registra alcuna attività se provo ad avviare la mia applicazione.
Inoltre, ho provato l'approccio da questo post .. usando ... tcp: ...
invece di ... tcp, ...
.. anche questo non ha funzionato.
Ho provato ad aggiungere un DataSource in Visual Studio - Test Connection: OK. Ho anche copiato la stringa di connessione visualizzata lì, incollata nella mia applicazione, avviata - non ha funzionato. E solo per dirlo: sì, l'applicazione utilizza effettivamente la stringa di connessione fornita.
Visual Studio e SQL Management Studio si connettono al server in un modo speciale che è diverso dall'utilizzo di una stringa di connessione?
Modifica 2 In base ai tuoi commenti Vorrei aggiungere le seguenti informazioni:
Dipendenze del progetto:
Il messaggio di log completo:
Type : SqlException
Message : 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: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
Source : Core .Net SqlClient Data Provider
HResult : -2146232060
TargetSite : .ctor
Stacktrace : 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 Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerDatabaseCreator.<>c__DisplayClass18_0.<Exists>b__0(DateTime giveUp)
at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.<>c__DisplayClass12_0`2.<Execute>b__0(DbContext c, TState s)
at Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, Func`2 operation, Func`2 verifySucceeded, TState state)
at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
at ch.wuerth.tobias.mux.Data.DataContextFactory.GetInstance()
at ch.wuerth.tobias.mux.plugins.PluginMusicBrainz.PluginMusicBrainz.Process(String[] args) in C:\Users\Tobias\Desktop\dev\mux-cli\plugins\PluginMusicBrainz\PluginMusicBrainz.cs:line 136
at ch.wuerth.tobias.mux.Core.plugin.PluginBase.Work(String[] args)
at ch.wuerth.tobias.mux.App.Program..ctor(String[] args) in C:\Users\Tobias\Desktop\dev\mux-cli\App\Program.cs:line 47
Data :
-> [HelpLink.ProdName, Microsoft SQL Server]
-> [HelpLink.EvtSrc, MSSQLServer]
-> [HelpLink.EvtID, 2]
-> [HelpLink.BaseHelpUrl, http://go.microsoft.com/fwlink]
-> [HelpLink.LinkId, 20476]
----- INNER EXCEPTION -----
Type : Win32Exception
Message : The system cannot find the file specified
HResult : -2147467259
(l'eccezione interna non ha stacktrace perché deve essere indefinita)
My DbContext inizializza la stringa di connessione in questo modo:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("..my connection string..");
}
Modifica 3 Suppongo ormai che il problema debba essere con l'inizializzazione di DbContext
, in quale altro modo si spiegherebbe i diversi comportamenti di MSSQL Studio e dell'applicazione.
Anche per quelli che cercano un contesto : sto sviluppando questa applicazione. Oltre al mio ambiente di sviluppo lokal, ho il server di produzione in cui distribuisco il mio ramo principale. Sul server di produzione è anche un database standalone con i dati di produzione come ci si aspetterebbe. Il problema che ho è che la mia CLI per la manipolazione dei dati (importazione, elaborazione, ..) sul server di produzione genera un'eccezione causata dai dati e non riesco a riprodurre l'errore sul mio ambiente di sviluppo. Invece di provare a copiare l'intero database (che è diversi gigabyte), ho pensato di provare a connettermi al database di produzione dal mio ambiente di sviluppo. Ciò mi consentirebbe di eseguire il debug dell'eccezione e risolvere il problema. Forse qualcuno ha un'idea alternativa su come posso eseguire il debug della mia applicazione con il database live?
Il tuo messaggio di errore contiene:
(provider: Named Pipes Provider, errore: 40 - Impossibile aprire una connessione a SQL Server)
Hai aperto "Gestione configurazione server SQL" e assicurato che "Named Pipes" sia abilitato? Questa impostazione è in 3 posizioni.
Puoi provare ad aggiungere questa stringa di connessione
"ConnectionStrings": {
"DbConnection": "Data Source=tcp:127.0.0.1,5000\\DBMSSOCN;Initial Catalog=mdstsbase;Integrated Security=false;User ID=user;Password=password;Application Name=application name"
}