Kiedy wystąpił ten błąd w programie Visual Studio,
„Wystąpił błąd związany z siecią lub specyficzny dla instancji podczas nawiązywania połączenia z programem SQL Server. Serwer nie został znaleziony lub był niedostępny. Sprawdź, czy nazwa instancji jest poprawna i czy SQL Server jest skonfigurowany do zezwalania na połączenia zdalne. (dostawca: dostawca nazwanych potoków, błąd: 40 - Nie można otworzyć połączenia z programem SQL Server) ”
... to było podczas wykonywania następującego kodu C #, który próbował uzyskać moje dane programu SQL Server, aby wyświetlić je w siatce. Przerwanie nastąpiło dokładnie w wierszu z komunikatem 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
}
}
}
}
Było to niewytłumaczalne, ponieważ zapytanie SQL było bardzo proste, miałem odpowiedni ciąg połączenia, a serwer bazy danych był dostępny. Postanowiłem ręcznie uruchomić rzeczywiste zapytanie SQL w SQL Management Studio, które zadziałało dobrze i przyniosło kilka rekordów. Ale jedna rzecz wyróżniała się w wynikach zapytania: w polu typu varchar (max) w tabeli Znajomi znajdował się niepoprawnie zakodowany tekst HTML (konkretnie niektóre zakodowane symbole komentarza tego rodzaju <!--
umieszczone w danych kolumny „Narracja”). Podejrzany wiersz danych wyglądał następująco:
Name Birthdate Narrative
==== ========= ==============
Fred 21-Oct-79 <!--HTML Comment -->Once upon a time...
Zwróć uwagę na zakodowany symbol HTML „ <
”, który oznaczał znak „<”. Jakoś to dostało się do bazy danych i mój kod C # nie mógł go odebrać! Nie powiodło się za każdym razem bezpośrednio na linii connect.Open ()! Po tym, jak ręcznie zredagowałem ten wiersz danych w tabeli bazy danych Znajomi i wstawiłem zamiast tego zdekodowany znak „<”, wszystko działało! Oto jak powinien wyglądać ten wiersz:
Name Birthdate Narrative
==== ========= ==============
Fred 21-Oct-79 <!--HTML Comment -->Once upon a time...
Zedytowałem jeden zły wiersz, który miałem, używając poniższej prostej instrukcji UPDATE. Ale jeśli masz kilka obrażających wierszy zakodowanego HTML, możesz potrzebować bardziej rozbudowanej instrukcji UPDATE, która korzysta z funkcji REPLACE:
UPDATE Friends SET Narrative = '<!--HTML Comment -->Once upon a time...' WHERE Narrative LIKE '<%'
Morał tej historii jest (przynajmniej w moim przypadku), odkaż zawartość HTML przed zapisaniem jej w bazie danych, a nie dostaniesz tego tajemniczego błędu SQL Servera! (Uh, prawidłowe odkażanie / dekodowanie zawartości HTML jest przedmiotem innej dyskusji, wartej osobnego wyszukiwania StackOverflow, jeśli potrzebujesz więcej informacji!)