2013-07-11 19 views
7

Vedo il seguente errore quando si tenta di aprire una connessione DB dall'interno dell'applicazione C#. Mi rendo conto che questo errore si è probabilmente verificato in centinaia di domande prima. Tuttavia, in questo scenario l'errore viene visualizzato solo sulle app C# in esecuzione su sul mio PC desktop specifico. Ho setacciato Internet tramite Google e all'interno di questo sito Web, ma non riesco a trovare una soluzione.SqlConnection bloccato su Named Pipes

ERRORE:

"Si è verificato un errore relativo alla rete o specifica dell'istanza mentre stabilisce una connessione a SQL Server Il server non è stato trovato o non era accessibile Verificare che il nome dell'istanza sia corretto e che SQL Server.. è configurato per consentire le connessioni remote. (fornitore: Canali denominati fornitore, errore: 40 - Impossibile aprire una connessione a SQL Server)"

PERCHE questo scenario è unico:

sono in grado di connettersi a SQL server da SQL Server Management Studio (SSMS). Questa applicazione funziona su un altro computer ed è in grado di stabilire una connessione al server SQL da lì. Quindi questo scenario di errore è specifico per le applicazioni C# in esecuzione sul mio PC desktop specifico. Altre app funzionano (SSMS). Altro lavoro di PC.

Quando "annuso il filo" tramite WireShark, la traccia indica che la mia app sta tentando di connettersi tramite NamedPipes (ad esempio \ Server \ IPC $). Non riesco a forzarlo a usare TCP/IP.

cose che ho provato:

  • Re-installed.NET quadro
  • Re-installato Visual Studio (C# - Express versione 2010)
  • Creato un alias all'interno cliconfg.exe.

C'è qualcosa che mi è mancato?

Qui ci sono stringhe di connessione che ho provato ...

Data Source=<servername>;Initial Catalog=HIE;Integrated Security=true 
Server=tcp:10.240.11.81;Integrated Security=SSPI; database=HIE 
Data Source=10.240.11.81,1433;Network Library=DBMSSOCN;Initial Catalog=HIE;User ID=<SqlUserIdThatISetUpAsSysAdmin>;Password=<password> 

Ecco il frammento di codice:

_conn = new SqlConnection(); // _conn declared globally 
_conn.ConnectionString = <the connection string above>; 
_conn.Open(); 
+1

Metti il ​​'tcp:' anche in per 'Origine dati'. Inserisci la stringa di connessione nel codice sorgente C#. Il debugging di wireshark è stato molto buono perché mostra che non sta usando tcp. – usr

+0

Grazie per la rapida risposta @usr. Amico, voi ragazzi siete VELOCI! Ho provato "Data Source = TCP: ; Initial Catalog = HIE; Integrated Security = True" e "Data Source = TCP: 10.240.11.81; Initial Catalog = HIE; Integrated Security = True" e ha ricevuto nuovi messaggi: (provider: TCP Provider, errore: 0 - Si è verificato un errore irreversibile durante una ricerca nel database.) E (provider: Provider TCP, errore: 0 - È stato fornito un argomento non valido.) Google non mi ha fornito nulla su questi messaggi di errore. Il database "HIE" esiste sul server. –

+0

È pazzesco. L'errore indica condizioni molto strane secondo Google. Puoi telnet su SQL Server usando quell'IP e la porta 1433? L'app viene eseguita come amministratore? Disattiva UAC o esegui elevati per favore. Per favore, esegui di nuovo Wireshark. Cosa risulta? – usr

risposta

0

O ridefinire l'origine dati come suggerito dal commento di usr, o configurare SQL Server per consentire connessioni TCP (perché non consentirebbe comunque connessioni TCP?).

Ecco il link per abilitare TCP su SQL Server (La risposta accettata è dove si vuole guardare):

Enable remote connections for SQL Server Express 2012

+0

La lib client non sta nemmeno usando TCP secondo Wireshark. L'endpoint TCP del server non può essere il problema. – usr

+0

@usr Strano. Ho avuto questo errore prima e l'ho sempre risolto configurando correttamente SQL Server. –

+0

@usr Basta dare un'occhiata al link per favore. L'altro utente ha avuto lo stesso identico problema e apparentemente è stato risolto configurando correttamente SQL Server. –

1

Lo scenario più probabile è che Windows Firewall è bloccare lo SQL Server comunicazione. Da MSDN (un articolo su named pipe, ma rilevanti comunque):

Microsoft Windows XP Service Pack 2 enables Windows Firewall, which closes port 445 by default. Because Microsoft SQL Server communicates over port 445, you must reopen the port if SQL Server is configured to listen for incoming client connections using named pipes. For information on configuring a firewall, see "How to: Configure a Firewall for SQL Server Access" in SQL Server Books Online or review your firewall documentation.

Un altro scenario è che la configurazione del client sul computer locale non è configurato correttamente. Dal prompt di esecuzione, è possibile eseguire cliconfg (l'utilità di configurazione client di SQL Server) per visualizzare i protocolli abilitati e gli alias utilizzati per i protocolli.

+0

Sì.Stato morso dalla porta 445 che viene chiuso un paio di volte e ogni volta sembra prendere un'illuminazione per realizzare il firewall ha bisogno di aggiornamento. –

+0

Questo non spiega il primo errore (non è stata nemmeno tentata alcuna connessione TCP). In secondo luogo, non vedo alcuna relazione con i nuovi messaggi di errore ricevuti dall'OP. Non è come "connessione rifiutata" o qualcosa del genere. – usr

+0

Ho risolto problemi di firewall e cliconfg. Non è un problema con il firewall, poiché l'SSMS sulla mia macchina (dove il mio programma non riesce a connettersi) è in grado di connettersi al server SQL (è remoto, non sulla mia scatola). ADO.NET non sembra utilizzare le impostazioni cliconfg. Ho dovuto nominare esplicitamente il provider TCP (Network Library = DBMSSOCN o Data Source = TCP: HHVSVTSQL01) per poterlo utilizzare ADO.NET. Ma ho iniziato a ricevere un messaggio di errore diverso senza traffico sul cavo. –

0

Stai eseguendo il codice dal disco locale o da un'unità di rete? Ho riscontrato un problema molto simile in cui la mia unità di rete non era affidabile in .Net e questo era il motivo per cui le mie connessioni fallivano.