문제

약간의 유지 보수가 필요한 오래된 .NET 1.0 WebApp이 있습니다. 자동 업그레이드를 사용하여 .NET 3.5로 업그레이드하고 (나중에 2.0을 시도했지만) 이제 데이터베이스에 연결할 수 없습니다.

표면적으로 이것은 멍청한 연결 스트링 문제처럼 보이지만 업그레이드의 미묘한 문제와 관련이있을 가능성이 높다고 생각합니다.


일반 오류 메시지가 표시됩니다.

서버에 대한 연결을 설정하는 동안 오류가 발생했습니다. SQL Server 2005에 연결할 때이 실패는 기본 설정에서 SQL Server가 원격 연결을 허용하지 않기 때문에 발생할 수 있습니다. (제공자 : 명명 된 파이프 제공 업체, 오류 : 40- SQL Server와의 연결을 열 수 없음)


소스 코드는 종이나 휘파람없이 매우 기본적입니다.

protected static SqlConnection objConn;

objConn = new SqlConnection(strConnectionString);

try
{
    objConn.Open();
}

또한 다음과 같이 시도했습니다.

using (objConn = new SqlConnection(strConnectionString))
{
    objConn.Open();
    ...
}

연결 문자열은 web.config에서 나오고 디버거를 사용하여 브레이크 포인트를 설정하고 연결을 열기 전에 연결 속성을 살펴보고 연결 문자열을 올바르게 찾았 음을 알 수 있습니다.

ConnectionString = "데이터 소스 = xxx.xxx.xxx.xxx; 초기 카탈로그 = xxxxxx; user id = xxxxxx; password = xxxxxx"


내가 배제했다고 생각하는 소수의 것들.

오류 메시지는 SQL Server 2005 또는 SQL Server 2000에 연결하든 동일합니다.

VS 오류 목록에 오류 나 경고가 없습니다.

연결 문자열은 동일한 데이터베이스를 사용하는 몇 개의 다른 웹 사이트와 동일하므로 연결 문자열이 정확하다는 것을 알고 있습니다.

로컬 컴퓨터 (SQL 쿼리 분석기를 통해 데이터베이스에 연결할 수있는 곳)와 일반 웹 서버에서 연결하려고 했으므로 방화벽 문제가 아니며 최대 연결 문제도 아닙니다.

서버의 IP 주소에 연결되므로 컴퓨터 브라우저 문제가 아닙니다 (및 다른 WebApp은 정상적으로 연결할 수 있습니다.

TCP 및 명명 된 파이프는 SQL 서버에서 활성화 된 2 개의 네트워크 프로토콜입니다.

"네트워크 라이브러리 = DBMSSOCN"추가 연결 문자열에는 오류 메시지가 "제공자 : TCP 제공 업체, 오류"를 포함하도록 오류 메시지를 변경합니다 (다른 날에도 그 영향을 미치는 연결 문자열에 다른 변경 사항이 있었지만 지금은 기억이 나지 않습니다.)


나는 이미 스택 오버플로에서 3 개의 다른 유사한 게시물을 살펴 보았습니다.
(내가 새로운 사용자이기 때문에 여기에 링크를 나열 할 수는 없지만 다른 사람이 의견으로 그들과 연결하고 싶어한다면 질문 ID는 다음과 같습니다. 63875, 1038888, 846479)
그리고 다른 사이트 의이 기사는 도움이되지 않는 시도에 대한 좋은 아이디어가있었습니다.
http://weblogs.sqlteam.com/tarad/archive/2008/05/23/60609.aspx


가장 좋은 추측은 .NET 버전 간의 업그레이드로 인한 것입니다. 아마도 Web.config에서 뭔가 잘못 되었습니까?

C# 앱, 꽤 작고 기본이지만 세 가지 프로젝트로 나뉘어졌습니다.

도움이 되었습니까?

해결책

게시 한 코드를 사용하여 데이터베이스에 연결하려고 시도하는 콘솔 응용 프로그램을 작성하십시오. 콘솔 프로그램에서 연결 문자열을 하드 코딩합니다.

다시 말해, 모든 산만 함을 제거하여 실행하려는 핵심 코드가 실제로 올바르게 작동하는지 확인하십시오.

다른 팁

이 문제에 대한 실제 솔루션이 없었기 때문에 다음은 다음과 같이 도움이되었습니다.

ASP.NET 2.0 응용 프로그램을 .NET 3.5로 완벽하게 실행하는 것을 업그레이드했을 때 정확히 같은 문제가있었습니다. 웹 앱은 Windows XP에서 IIS 5.1에서 호스팅되고 있으며 SQL Server Express 2005를 사용하고 있습니다. web.config에서 다음 연결 문자열을 사용하고 있습니다.

<add name="myDbConnection" providerName="System.Data.SqlClient" connectionString="Data Source=http://localhost;Server=.\SQLEXPRESS;Initial Catalog=MyDatabaseName;Integrated Security=True"/>

보시다시피, 나는 여기에 TCP 연결을하지 않거나 원격 서버에 연결하고 있습니다. 나는 이름이 지정된 파이프를 통해 LocalHost에서 sqlexpress 인스턴스를 연결하고 있습니다. 그렇기 때문에 SQL Server 2005에서 원격 연결을 허용하는 것과는 전혀 관련이 없습니다. 그러나 내가 알았 듯이, 그것은 그렇게합니다! (나는 이것에 대한 실제 이유를 모른다!) 나는 그것을 찾기 위해 몇 시간을 보냈다. 그래서 이것은 누군가를 도울 것이다 ...

해야 할 일 (세부 사항은 Google을 사용하십시오) :

  1. SQL Server 2005 표면적 구성 도구를 통해 로컬 및 원격 연결 허용 ( "TCP/IP 및 이름의 파이프를 모두 사용하여"옵션을 선택합니다).
  2. SQL Server 브라우저 서비스를 활성화하십시오
  3. SQL Server Configuration Manager 도구를 통해 모든 IP에 대해 청취 TCP 포트를 1433으로 설정하십시오.
  4. 실행중인 웹 앱을 즐기십시오 :-)

.NET 2.0에서 이미 작동 할 때 .NET 3.5 웹 앱에서 SQL Server로 성공적으로 연결하기 위해이 모든 것이 필요한 이유는 무엇입니까?

에 따르면 이것, SQL 2005는 들어오는 로컬 또는 원격 연결을 허용하도록 구성되지 않으며 직접 활성화해야합니다.

이 단계를 이미 살펴 보았지만 ... SQL Server에 대한 원격 연결을 활성화하고 SQL Server 브라우저 서비스를 활성화하십시오. 둘 다를위한 연습을 찾을 수 있습니다 여기.

다른 유형의 연결 문자열을 사용해 볼 수 있습니다. 내 연결 문자열은 일반적으로 다음과 같이 형식화됩니다.

<add name="DataFrom" connectionString="SERVER=[servername];Database=[dbname];UID=[userid];PWD=[password];"/>

.NET 3.5 응용 프로그램도 작동한다고 말한 다른 응용 프로그램입니까?



나는 또한 당신 이이 코드를 어떻게 작동시키는 지 궁금합니다.

using (var = new SqlConnection(strConnectionString))
{
    objConn.Open();
    ...
}

나는 당신이 의미한다고 생각합니다

using (objConn = new SqlConnection(strConnectionString)) 

오른쪽?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top