2013-07-11 4 views
7

C# 응용 프로그램 내에서 DB 연결을 열려고 할 때 다음 오류가 표시됩니다. 나는이 오류가 이전에 100 가지 질문에 나타 났음을 알았습니다. 그러나이 시나리오에서는 오류가 C# apps특정 데스크톱 PC에서 실행 중일뿐입니다. 나는 Google과이 웹 사이트를 통해 인터넷을 샅샅이 뒤졌지만 해결책을 찾지 못했습니다.명명 된 파이프에 SqlConnection이 붙어 있습니다.

ERROR :

"SQL 서버에 연결하는 동안 네트워크 관련 또는 인스턴스 관련 오류가 발생한 서버를 찾을 수 없거나 액세스 할 수 없습니다 된 인스턴스 이름이 올바른지 확인하고 SQL 서버.. 원격 연결을 허용하도록 구성되어 있습니다. -이 시나리오는 UNIQUE 이유 "

(공급자 : 명명 된 파이프 공급자, 오류 (40)는 SQL Server에 대한 연결을 열 수 없습니다) :

나는 SQL에 연결할 수 있어요

서버 SQL Server Management Studio (SSMS) 이 응용 프로그램 은 다른 컴퓨터에서 작동하며 거기에서 SQL 서버에 연결할 수 있습니다. 따라서이 오류 시나리오는 특정 데스크톱 PC에서 실행되는 C# 응용 프로그램에만 적용됩니다. 다른 앱이 작동합니다 (SSMS). 다른 PC의 작업.

WireShark를 사용하여 "전선을 감지"할 때 내 응용 프로그램이 NamedPipes (예 : \ Server \ IPC $)를 통해 연결하려고한다는 것을 나타냅니다. TCP/IP를 사용하도록 강제 할 수는 없습니다. 내가 해봤

사항 :

  • Re-installed.NET 프레임 워크
  • 다시 설치 비주얼 스튜디오 (C 번호 - 익스프레스 버전 2010)
  • cliconfg.exe를 내 별명을 만들었습니다.

내가 놓친 것이 있습니까? 여기

여기
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> 

는 코드의 ... 내가 해봤 연결 문자열은 다음과 같습니다

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

'데이터 소스'에 대해서도 'tcp :'를 넣으십시오. C# 소스 코드에 연결 문자열을 하드 코딩합니다. wireshark 디버깅은 tcp를 사용하지 않는다는 것을 보여주기 때문에 매우 좋았습니다. – usr

+0

빠른 답장을 보내 주셔서 감사합니다. 남자 .. 너희들은 빠르다! "데이터 원본 = TCP : ; 초기 카탈로그 = HIE; 통합 보안 = True"및 "데이터 원본 = TCP : 10.240.11.81; 초기 카탈로그 = HIE, 통합 보안 = True"및 새 메시지 받기 : (공급자 : TCP 공급자, 오류 : 0 - 데이터베이스 조회 중에 복구 할 수없는 오류가 발생했습니다.) (공급자 : TCP 공급자, 오류 : 0 - 잘못된 인수가 제공되었습니다.) Google은 이러한 오류 메시지에 대해 아무 것도주지 않았습니다. "HIE"데이터베이스는 서버에 존재합니다. –

+0

그건 미친 짓이야. 오류는 Google에 따르면 매우 이상한 조건을 나타냅니다. 해당 IP 및 포트 1433을 사용하여 SQL Server에 텔넷을 연결할 수 있습니까? 앱이 관리자로 실행되고 있습니까? UAC를 끄거나 승진하십시오. Wireshark를 다시 실행하십시오. 그게 뭐야? – usr

답변

0

어느 USR의 의견에 의해 제안하여 데이터 소스를 재정의하거나 SQL Server를 구성 TCP 연결을 허용합니다 (왜 TCP 연결을 허용하지 않습니까?).

Enable remote connections for SQL Server Express 2012

+0

클라이언트 라이브러리는 Wireshark에 따라 TCP를 사용하지 않습니다. 서버의 TCP 끝점은 문제가 될 수 없습니다. – usr

+0

@usr 이상합니다. 전에이 오류가 있었고 SQL Server를 올바르게 구성하여 문제를 해결했습니다. –

+0

@usr 그냥 링크를보십시오. 다른 사용자는 똑같은 문제가 있었으며 분명히 SQL Server를 올바르게 구성하여 해결되었습니다. –

1

가능성이 가장 높은 시나리오는 Windows 방화벽이 SQL 서버를 차단하는 점이다 : 여기

가 SQL 서버에 TCP를 활성화하는 링크입니다 (허용 된 대답은 당신이보고 싶은 곳입니다) 통신. (관련 그럼에도 불구하고 명명 된 파이프에 대한 기사 만) MSDN에서 :

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.

또 다른 시나리오는 로컬 컴퓨터에 클라이언트 구성이 제대로 구성되지 않은 것입니다. 실행 프롬프트에서 cliconfg (SQL Server 클라이언트 구성 유틸리티)을 실행하여 사용 가능한 프로토콜과 프로토콜에 사용 된 별칭을 볼 수 있습니다.

+0

예.포트 445가 몇 번 닫히고 매번 방화벽이 업데이트되어야한다는 것을 깨닫기 위해 떠오르는 것처럼 보입니다. –

+0

첫 번째 오류는 설명하지 않습니다 (TCP 연결이 시도되지 않았습니다). 둘째, OP가받는 새로운 오류 메시지와 관련이 없습니다. 그것은 "연결 거부"또는 이와 비슷한 것이 아닙니다. – usr

+0

저는 방화벽 및 cliconfg 문제를 해결했습니다. 방화벽 문제는 아닙니다. 내 컴퓨터의 SSMS (내 프로그램이 연결되지 않는 곳)가 SQL 서버에 연결할 수 있기 때문에 (내 컴퓨터가 아닌 원격의) SQL 서버에 연결할 수 있습니다. ADO.NET은 cliconfg 설정을 사용하지 않는 것으로 보입니다. TCP 공급자 (Network Library = DBMSSOCN 또는 Data Source = TCP : HHVSVTSQL01)를 명시 적으로 명명해야 ADO.NET에서이를 사용할 수있었습니다. 하지만 전선에 트래픽이 표시되지 않고 다른 오류 메시지가 표시되기 시작했습니다. –

0

로컬 디스크 또는 네트워크 드라이브에서 코드를 실행하고 있습니까? 내 네트워크 드라이브가 .Net에서 신뢰할 수없는 매우 유사한 문제가 발생하여 내 연결이 실패한 이유였습니다.