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 Management Studio에서 실제 SQL 쿼리를 수동으로 직접 실행하기로 결정했으며 제대로 실행되어 여러 레코드가 생성되었습니다. 그러나 쿼리 결과에서 한 가지 두드러진 점이 있습니다. Friends 테이블의 varchar (max) 유형 필드 내에 잘못 인코딩 된 HTML 텍스트가 있습니다 (특히 <!--
"Narrative"열 데이터 내에 정렬 된 일부 인코딩 된 주석 기호 ). 의심스러운 데이터 행은 다음과 같습니다.
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에 여러 개의 잘못된 행이있는 경우 REPLACE 함수를 사용하는보다 정교한 UPDATE 문이 필요할 수 있습니다.
UPDATE Friends SET Narrative = '<!--HTML Comment -->Once upon a time...' WHERE Narrative LIKE '<%'
따라서 이야기의 교훈은 (적어도 나의 경우에는) 데이터베이스에 저장하기 전에 HTML 내용을 삭제하면 처음에는이 cryptic SQL Server 오류가 발생하지 않습니다! (자세한 정보가 필요한 경우 HTML 콘텐츠를 올바르게 위생 처리 / 디코딩하는 것은 별도의 StackOverflow 검색이 필요한 또 다른 토론의 주제입니다!)