[C#] MSSQL 오류 ‘기본 공급자가 Open에서 실패했습니다’

나는 사용하던 .mdfA를 연결하는database 하고 entityClient. 이제 .mdf파일 이 없도록 연결 문자열을 변경하고 싶습니다 .

다음이 connectionString맞습니까?

<connectionStrings>
   <!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />-->
   <add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

항상 오류가 발생하기 때문에 :

기본 공급자가 Open에서 실패했습니다



답변

이 오류가 발생하여 몇 가지 해결책을 찾았습니다.

연결 문자열을 보면 유효 해 보입니다. 이 블로그 게시물을 찾았 는데 여기서 문제는 통합 보안 을 사용하고 있다는 것 입니다. IIS에서 실행중인 경우 IIS 사용자는 데이터베이스에 액세스해야합니다.

Transactions와 함께 Entity Framework 사용하는 경우 Entity Framework 는 각 데이터베이스 호출과의 연결을 자동으로 열고 닫습니다. 따라서 트랜잭션을 사용할 때 여러 연결을 통해 트랜잭션을 분산 시키려고합니다. 이것은 MSDTC로 상승 .

( 자세한 내용은이 참조를 참조하십시오. )

내 코드를 다음과 같이 수정했습니다.

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}


답변

context.Connection.Open() 내 문제를 해결하는 데 도움이되지 않았으므로 DTC 구성에서 “원격 클라이언트 허용”을 사용하려고 시도했지만 더 이상 오류가 없습니다.

Windows 7에서는 dcomcnfg, 구성 요소 서비스-> 컴퓨터-> 내 컴퓨터-> 분산 트랜잭션 코디네이터-> 로컬 DTC-> 보안을 마우스 오른쪽 단추로 실행하여 DTC 구성을 열 수 있습니다.


답변

당신은 볼 수 의 InnerException가 오류로 던지는의 내부 원인이 무엇인지 확인합니다.

필자의 경우 원래 오류는 다음과 같습니다.

실제 파일 “D : \ Projects2 \ xCU \ xCU \ App_Data \ xCUData_log.ldf”를 열 수 없습니다. 운영 체제 오류 5 : “5 (액세스가 거부되었습니다.” “). 파일 D : \ Projects2 \ xCU \ xCU \ App_Data \ xCUData.mdf에 대해 자동 명명 된 데이터베이스를 연결하지 못했습니다. 이름이 같은 데이터베이스가 있거나 지정된 파일을 열 수 없거나 UNC 공유에 있습니다.

파일 속성을 사용하여 관련 mdfldf파일 에 액세스하기 위해 현재 사용자에게 모든 권한을 부여하여 해결되었습니다 .


답변

문제는 다음 변형 중 하나의 연결 문자열 내에 서버 경로가 있다는 것입니다.

SERVER\SQLEXPRESS
SERVER

내가 정말로해야 할 때 :

.\SQLEXPRESS

어떤 이유로 든 SQL 인스턴스를 찾는 데 어려움이있을 때마다 오류가 발생했습니다.


답변

이것은 일반적인 문제입니다. 심지어 나는이 문제에 직면했다. Windows 인증으로 구성된 개발 시스템에서 완벽하게 작동합니다.

<add name="ShoppingCartAdminEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQlExpress;initial catalog=ShoppingCartAdmin;Integrated Security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

동일한 구성으로 IIS에서 호스팅하면이 오류가 발생합니다.

기본 공급자가 Open에서 실패했습니다

connectionString구성 파일에서 변경 되어 해결 되었습니다.

<add name="MyEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MACHINE_Name\SQlExpress;initial catalog=ShoppingCartAdmin;persist security info=True;user id=sa;password=notmyrealpassword;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

다른 일반적인 실수는 다음과 같습니다.

  1. 데이터베이스 서비스가 중지 될 수 있습니다
  2. Windows 인증을 사용하고 IIS에서 호스팅되는 로컬 데이터베이스를 가리키는 데이터 소스 속성
  3. 사용자 이름과 비밀번호가 잘못되었을 수 있습니다.

답변

이 예외를 수신하면 세부 사항을 펼치고 내부 예외 세부 사항을 살펴보십시오 . 이유에 대한 세부 사항이 제공됩니다. 로그인 실패 . 필자의 경우 연결 문자열에 내 데이터베이스에 액세스 할 수없는 사용자가 포함되었습니다.

통합 보안 (로그인 된 Windows 사용자의 컨텍스트)을 사용하는지 또는 개별 SQL 계정을 사용하는지에 관계없이이 문제를 방지하기 위해 액세스하려는 데이터베이스에 대해 ‘보안’에서 사용자에게 적절한 액세스 권한이 있는지 확인하십시오.


답변

내가 가진 유사한 문제했다 SQL 서버 익스프레스 에디션윈도우 서버 2003 . 데이터베이스 보안에서 사용자로 네트워크 서비스를 추가했습니다.