Quando ho riscontrato questo errore in Visual Studio,
"Si è verificato un errore relativo alla rete o specifico dell'istanza durante la creazione di 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 sia configurato per consentire connessioni remote. (provider: provider di tubi denominato, errore: 40 - Impossibile aprire una connessione a SQL Server) "
... è stato durante l'esecuzione del seguente codice C #, che stava tentando di ottenere i miei dati di SQL Server per visualizzarli in una griglia. L'interruzione si è verificata esattamente sulla riga che dice connect.Open ():
using (var connect = Connections.mySqlConnection)
{
const string query = "SELECT Name, Birthdate, Narrative FROM Friends";
using (var command = new SqlCommand(query, connect))
{
connect.Open();
using (var dr = command.ExecuteReader())
{
while (dr.Read())
{
// blah
}
}
}
}
Era inspiegabile perché la query SQL era molto semplice, avevo la stringa di connessione corretta e il server di database era disponibile. Ho deciso di eseguire manualmente l'effettiva query SQL in SQL Management Studio e ha funzionato bene e ha prodotto diversi record. Ma una cosa si è distinta nei risultati della query: c'era un testo HTML codificato in modo errato all'interno di un campo di tipo varchar (max) all'interno della tabella Friends (in particolare, alcuni simboli di commento codificati del tipo <!--
alloggiati nei dati della colonna "Narrativa"). La riga di dati sospetti appariva così:
Name Birthdate Narrative
==== ========= ==============
Fred 21-Oct-79 <!--HTML Comment -->Once upon a time...
Notare il simbolo HTML " <
" codificato , che indicava un carattere "<". In qualche modo si è fatto strada nel database e il mio codice C # non è riuscito a rilevarlo! Ha fallito ogni volta proprio sulla linea connect.Open ()! Dopo aver modificato manualmente quella riga di dati nella tabella del database Friends e aver inserito il carattere "<" decodificato, tutto ha funzionato! Ecco come dovrebbe apparire quella riga:
Name Birthdate Narrative
==== ========= ==============
Fred 21-Oct-79 <!--HTML Comment -->Once upon a time...
Ho modificato l'unica riga negativa che avevo usando questa semplice istruzione UPDATE di seguito. Ma se hai avuto diverse righe offensive di HTML codificato, potresti aver bisogno di un'istruzione UPDATE più elaborata che utilizza la funzione REPLACE:
UPDATE Friends SET Narrative = '<!--HTML Comment -->Once upon a time...' WHERE Narrative LIKE '<%'
Quindi, la morale della storia è (almeno nel mio caso), disinfettare il tuo contenuto HTML prima di archiviarlo nel database e non otterrai questo criptico errore di SQL Server in primo luogo! (Uh, la corretta sanificazione / decodifica del contenuto HTML è oggetto di un'altra discussione degna di una ricerca StackOverflow separata se hai bisogno di maggiori informazioni!)