Когда я столкнулся с этой ошибкой в Visual Studio,
«При установлении соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений. (поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server) »
... это было во время выполнения следующего кода C #, который пытался получить мои данные SQL Server для отображения их в сетке. Разрыв произошел точно в строке, которая говорит 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
}
}
}
}
Это было необъяснимо, потому что SQL-запрос был очень простым, у меня была правильная строка соединения, и сервер базы данных был доступен. Я решил выполнить сам SQL-запрос вручную в SQL Management Studio, и он работал нормально и дал несколько записей. Но одна вещь выделялась в результатах запроса: в таблице типа Friends в поле «Друзья» (в частности, некоторые закодированные символы комментариев такого рода <!--
помещались в данные столбца «Narrative») был какой-то неправильно закодированный HTML-текст . Подозреваемая строка данных выглядела так:
Name Birthdate Narrative
==== ========= ==============
Fred 21-Oct-79 <!--HTML Comment -->Once upon a time...
Обратите внимание на закодированный символ HTML " <
", который обозначал символ "<". Каким-то образом это проникло в базу данных, и мой код C # не смог его поднять! Это не удавалось каждый раз прямо на линии connect.Open ()! После того, как я вручную отредактировал эту строку данных в таблице базы данных Friends и вставил вместо нее декодированный символ «<», все заработало! Вот как должна выглядеть эта строка:
Name Birthdate Narrative
==== ========= ==============
Fred 21-Oct-79 <!--HTML Comment -->Once upon a time...
Я отредактировал одну плохую строку, которую использовал, с помощью этого простого оператора UPDATE ниже. Но если у вас есть несколько строк закодированного HTML, вам может потребоваться более сложный оператор UPDATE, который использует функцию REPLACE:
UPDATE Friends SET Narrative = '<!--HTML Comment -->Once upon a time...' WHERE Narrative LIKE '<%'
Итак, мораль этой истории (по крайней мере, в моем случае) состоит в том, чтобы очистить содержимое HTML перед его сохранением в базе данных, и вы не получите эту загадочную ошибку SQL Server в первую очередь! (Ну, правильная дезинфекция / декодирование вашего HTML-контента является предметом другого обсуждения, заслуживающего отдельного поиска в StackOverflow, если вам нужна дополнительная информация!)