[c#] SQL 네트워크 인터페이스, 오류 : 50-로컬 데이터베이스 런타임 오류가 발생했습니다. 자동 인스턴스를 만들 수 없습니다.

폴더에 MyDatabase.mdf파일 이있는 ASP.NET MVC 5 웹 응용 프로그램을 빌드하려고 App_Data합니다. LocalDb인스턴스 와 함께 SQL Server 2014 Express가 설치되어 있습니다. 서버 탐색기를 사용하여 데이터베이스 테이블을 편집 할 수 있지만 응용 프로그램을 디버그하고 데이터베이스가 필요한 페이지로 이동하면 다음 오류가 발생합니다.

SQL Server에 대한 연결을 설정하는 동안 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다. 서버를 찾을 수 없거나 액세스 할 수 없습니다. 인스턴스 이름이 올 바르고 SQL Server가 원격 연결을 허용하도록 구성되어 있는지 확인하십시오. (제공자 : SQL 네트워크 인터페이스, 오류 : 50-로컬 데이터베이스 런타임 오류가 발생했습니다. 자동 인스턴스를 만들 수 없습니다. 오류 세부 정보는 Windows 응용 프로그램 이벤트 로그를 참조하십시오.

그래서 아래의 이벤트 뷰어를 살펴 보았는데 Application경고 하나만 계속 해서 봤습니다 .

압축 된 콘텐츠 C : \ Users \ User1 \ AppData \ Local \ Temp \ iisexpress \ IIS Temporary Compressed Files \ Clr4IntegratedAppPool을 캐시하기 위해 지정된 디렉터리가 잘못되었습니다. 정적 압축이 비활성화됩니다.

그래서 서버 재부팅을 시도했지만 여전히 진행되지 않았습니다. 이전과 동일한 오류 50.

라는 클래스가 Models있는 곳에 클래스를 만들었습니다 Post.

namespace MyApplication.Models
{
    public class Post
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
    }

    public class MyDatabase : DbContext
    {
        public DbSet<Post> Posts { get; set; }
    }
}

또한 Controller의 게시물을 나열 하는 설정이 있습니다 MyDatabase.

namespace MyApplication.Controllers
{
    public class PostsController : Controller
    {
        private MyDatabase db = new MyDatabase();

        // GET: Posts
        public ActionResult Index()
        {
            return View(db.Posts.ToList());
        }
    }

web.config파일에서 연결 문자열은 다음과 같습니다.

<connectionStrings>
    <add name="DefaultConnection"
         connectionString="Data Source=(LocalDB)\v12.0;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Integrated Security=True"
         providerName="System.Data.SqlClient" />
</connectionStrings>

여기에 게시 된 제안을 시도했지만 작동하지 않았습니다. 또한 이것을 시도 했습니다 .

또한 응용 프로그램 실행을 시작한 후 MyDatabase 인스턴스의 연결이 끊어지는 것을 확인했습니다. Visual Studio에서 서버 탐색기를 사용하여 데이터베이스를 새로 고치면 테이블을 볼 수 있습니다.

Visual Studio 2013 내에서 데이터베이스에 연결하고 편집 할 수 있지만 응용 프로그램을 디버깅 할 때 데이터베이스에 연결할 수없는 이유는 무엇입니까?



답변

LocalDB의 주요 변경 사항 : SQL 2014에 적용됩니다 . 이 기사를 살펴보고 (localdb)\mssqllocaldb서버 이름으로 사용하여 LocalDB 자동 인스턴스에 연결해 보십시오 . 예를 들면 다음과 같습니다.

<connectionStrings>
  <add name="ProductsContext" connectionString="Data Source=(localdb)\mssqllocaldb;
  ...

이 기사에서는 2014 년 LocalDB에 연결하기 위해 2012 SSMS를 사용하는 방법도 언급합니다. 이로 인해 여러 버전의 SQL이 설치되어있을 수 있다고 믿습니다. 따라서이 SO 답변 을 지적하게됩니다. 향후 발생할 수있는 다른 버전 불일치 문제를 방지하기 위해 LocalDB “예”의 기본 이름을 변경 제안; 문제의 원인이 아니라 단일 개발 머신에 설치된 여러 SQL 버전이 발생할 수있는 잠재적 충돌에 대한 인식을 높이기 위해 … 그리고 일부를 피하기 위해 습관적으로 만들어야합니다.

언급 할 또 다른 것은 가치 – 후 사용해보십시오 – 다시 설치, 제거 – 당신이 사용할 수없는 상태로 인스턴스를 입수 한 경우로 인해이 문제를 시도하고 해결하기 위해 그것으로 땜질로는, 그것은 가치가 처음부터 다시 수 있습니다 mssqllocaldb대신 값을 v12.0하고 있는지 문제를 해결합니다.


답변

이것을 실행 :

sqllocaldb create “v12.0”

cmd 프롬프트에서 나를 위해 이것을 해결했습니다 …


답변

나는 일반적 으로이 msdn 블로그 게시물에 따라이 오류를 수정합니다. 전체 IIS와 함께 LocalDB 사용

이를 위해서는 일반적으로 C : \ Windows \ System32 \ inetsrv \ config에있는 applicationHost.config 파일을 편집해야합니다. KB 2547655의 지침에 따라 다음과 같이 응용 프로그램 풀 ASP.NET v4.0에 대해 두 플래그를 모두 활성화해야합니다.

<add name="ASP.NET v4.0" autoStart="true" managedRuntimeVersion="v4.0"     managedPipelineMode="Integrated">
    <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" />
</add>


답변

시작하려면-원인이 될 수있는 4 가지 문제가 있습니다. 일반적인 LocalDb SqlExpress Sql Server 연결 오류를 SQL Network Interfaces, error: 50 - Local Database Runtime error occurred있습니다. 시작하기 전에 v11 또는 v12의 이름을 (localdb) \ mssqllocaldb로 변경해야합니다.

Possible Issues
 \\ rename the conn string from v12.0 to MSSQLLocalDB -like so->
 `<connectionStrings>
      <add name="ProductsContext" connectionString="Data Source= (localdb)\mssqllocaldb;
      ...`

가장 간단한 방법은 아래 작업을 수행하는 것임을 알았습니다. 도움을 위해 사진과 단계를 첨부했습니다.

First verify which instance you have installed, 레지스트리를 확인하고 cmd를 실행하여이 작업을 수행 할 수 있습니다.

 1. `cmd> Sqllocaldb.exe i`
 2. `cmd> Sqllocaldb.exe s "whicheverVersionYouWantFromListBefore"`
if this step fails, you can delete with option `d` cmd> Sqllocaldb.exe d "someDb"
 3. `cmd> Sqllocaldb.exe c "createSomeNewDbIfyouWantDb"`
 4. `cmd> Sqllocaldb.exe start "createSomeNewDbIfyouWantDb"`

SqlLOCALDb_edited.png


많은 문제 해결 Registry구성

요청 및 의견 에서 편집 1 : 다음은 레지스트리를 추적하기위한 일반 형식의 모든 버전에 대한 레지스트리 경로입니다.

경로

// SQL SERVER RECENT VERSIONS
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\(instance-name)

// OLD SQL SERVER
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServer
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer
// SQL SERVER 6.0 and above.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSDTC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLExecutive
// SQL SERVER 7.0 and above

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLServerAgent
HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server 7
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServ65

수색

SELECT registry_key, value_name, value_data
FROM sys.dm_server_registry
WHERE registry_key LIKE N'%SQLAgent%';

또는 SSMS Sql Management Studio에서 실행하면 서버에있는 모든 설치의 전체 목록이 제공됩니다.

DECLARE     @SQL VARCHAR(MAX)
SET         @SQL = 'DECLARE @returnValue NVARCHAR(100)'
SELECT @SQL = @SQL + CHAR(13) + 'EXEC   master.dbo.xp_regread

 @rootkey      = N''HKEY_LOCAL_MACHINE'',
 @key          = N''SOFTWARE\Microsoft\Microsoft SQL Server\' + RegPath + '\MSSQLServer'',
 @value_name   = N''DefaultData'',
 @value        = @returnValue OUTPUT;

 UPDATE #tempInstanceNames SET DefaultDataPath = @returnValue WHERE RegPath = ''' + RegPath + '''' + CHAR(13) FROM #tempInstanceNames 

 -- now, with these results, you can search the reg for the values inside reg
 EXEC (@SQL)
 SELECT      InstanceName, RegPath, DefaultDataPath
 FROM        #tempInstanceNames

문제 해결 Network구성

SELECT registry_key, value_name, value_data
FROM sys.dm_server_registry
WHERE registry_key LIKE N'%SuperSocketNetLib%';


답변

인스턴스가 손상되었거나 제대로 업데이트되지 않았을 수 있습니다.

다음 명령을 시도하십시오.

C:\>sqllocaldb stop MSSQLLocalDB
LocalDB instance "MSSQLLocalDB" stopped.

C:\>sqllocaldb delete MSSQLLocalDB
LocalDB instance "MSSQLLocalDB" deleted.

C:\>sqllocaldb create MSSQLLocalDB
LocalDB instance "MSSQLLocalDB" created with version 13.0.1601.5.

C:\>sqllocaldb start MSSQLLocalDB
LocalDB instance "MSSQLLocalDB" started.


답변

아마도이 오류는 versionSQL Server 때문에 발생했습니다.is not installed

connectionString="Data Source=(LocalDB)\v12.0;....

그리고 당신은 그것을 설치할 필요가 없습니다

빠른 수정 당신이 설치된 버전으로 변경하는 것입니다

제 경우에는에서 v12.0로 변경합니다.MSSQLLocalDB


답변

이 문제에 대한 최종 해결책은 다음과 같습니다.

  1. 먼저 applicationHost 구성 파일을 변경하십시오. 아래 문자열 setProfileEnvironment = “false”를 setProfileEnvironment = “true”로 바꿉니다.

  2. 데이터베이스 연결 문자열에 아래 속성을 추가하십시오. 통합 보안 = SSPI