2013-04-23 2 views
-1

으로 제목이 표시되면 영구 데이터베이스 연결에 약간의 문제가 있음을 나타냅니다. 여기에는 개발 및 테스트 용 데이터베이스와 프로덕션 용 데이터베이스라는 두 개의 데이터베이스가 있습니다. 테스트하고 배포 할 때 여러 연결 문자열을 수동으로 변경하는 데 사용되었는데 때로는 이상한 오류가 발생했습니다. 우리가 dev 데이터베이스를 갑자기 멈추었을 때, SQL 연결이 끊어 졌다는 것을 말해 주면서 전체 프로덕션 애플리케이션이 작동을 멈췄습니다. 그러나 web.config는 테스트 환경이 아닌 프로덕션을 가리 킵니다.Dev 데이터베이스 프로덕션 환경에서 계속 연결 중입니다.

일부 연구 끝에 web.config 변환이 발견되어 문제가 해결 될 것이라고 생각했습니다. 그렇지 않았습니다. web.config가 단일 참조를 작성하지 않은 경우에도 응용 프로그램이 dev 환경에 엄격한 것처럼 문제는 여전히 지속됩니다.

좀더 명확하게하기 위해, 연결 문자열, 변환 및 일어난 최신 SQL 오류 (일부 업데이트의 경우 dev 데이터베이스를 단일 사용자로 제한했을 때)를 게시하고 우리가 DBML (L2SQL).

CONNECTION 문자열

<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/> 

    <!--ConnectionString Central--> 
    <add name="OperationsBD" connectionString="Data Source=DEVSERVER\DEV;Initial Catalog=OPERATION;Persist Security Info=True;User ID=lab;Password=devPassword" providerName="System.Data.SqlClient"/> 
    <add name="AnalisysBD" connectionString="Data Source=DEVSERVER\DEV;Initial Catalog=ANALISYS;Persist Security Info=True;User ID=lab;Password=devPassword" providerName="System.Data.SqlClient"/> 

<!--Production ConnectionString--> 
    <!--<add name="OperationsDB" connectionString="Data Source=PRODSERVER\COMPANY;Initial Catalog=OPERATION;Persist Security Info=True;User ID=company;Password=prodPassword" providerName="System.Data.SqlClient"/> 
    <add name="AnalisysDB" connectionString="Data Source=PRODSERVER\COMPANY;Initial Catalog=ANALISYS;Persist Security Info=True;User ID=company;Password=prodPassword" providerName="System.Data.SqlClient"/>--> 

Web.config의 변환 (PRODUCTION)

<connectionStrings> 
     <add name="OperationsDB" 
     connectionString="Data Source=PRODSERVER\COMPANY;Initial Catalog=OPERATION;Persist Security Info=True;User ID=company;Password=prodPassword" 
      providerName="System.Data.SqlClient" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 

     <add name="AnalisysDB" 
     connectionString="Data Source=PRODSERVER\COMPANY;Initial Catalog=ANALISYS;Persist Security Info=True;User ID=company;Password=prodPassword" 
      providerName="System.Data.SqlClient" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </connectionStrings> 

Web.config의 변환 (DEV) DEV에

<connectionStrings> 
     <add name="OperationsDB" 
     connectionString="Data Source=DEVSERVER\DEV;Initial Catalog=OPERATION;Persist Security Info=True;User ID=lab;Password=devPassword" 
      providerName="System.Data.SqlClient" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 

     <add name="AnalisysDB" 
     connectionString="Data Source=DEVSERVER\DEV;Initial Catalog=ANALISYS;Persist Security Info=True;User ID=lab;Password=devPassword" 
      providerName="System.Data.SqlClient" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </connectionStrings> 

SQL 오류 (단일 사용자 한정 환경)

,210
Cannot open database "operation" requested by the login. The login failed. Login failed for user 'lab'. 

그리고 마지막으로는, 그런데 우리는

public partial class OperationDataContext 
    { 
     private const string OPERATION_CONN_STRING = "OperationsDB"; 
     public OperationDataContext() 
      : base(System.Configuration.ConfigurationManager.ConnectionStrings[OPERATION_CONN_STRING].ConnectionString, mappingSource) 
     { 
      OnCreated(); 
     } 
    } 

    public partial class AnalisysDataContext 
    { 
     private const string ANALISYS_CONN_STRING = "AnalisysDB"; 
     public AnalisysDataContext() 
      : base(System.Configuration.ConfigurationManager.ConnectionStrings[ANALISYS_CONN_STRING].ConnectionString, mappingSource) 
     { 
      OnCreated(); 
     } 
    } 
+0

기본 web.config 연결 문자열은 요소 안에 있습니까? 요소가 의 직접적인 자손입니까? 요소와 경로는 주 구성 파일과 구성 변환 파일 사이에 정확하게 일치해야합니다. – Tommy

+0

@ 토미, 그렇습니다. web.config 변환은 완벽하게 작동하며이 문제에 대한 내 무지의 또 다른 이유입니다. 내가 변환 후 내 produtcion web.config를 확인할 때 내 dev에 DB에 대한 참조가 없다면 연결이 잘못된 DB를 가리 키기 때문에 내 클라이언트가 응용 프로그램을 사용할 수 없게됩니다. 내 생각 엔 VS가 dev DB를 참조하는 위장 코드를 생성하고있다. – AdrianoRR

답변

0

이 그냥 오타가있을 수 있습니다 SQL DBML에 LINQ에 연결,하지만 난 데브의 "이름" ""OperationsBD "이고 것을 통지했다 AnaylsisBD "이지만, 변환은"OperationsDB "및"AnaylsisDB "의 이름과 일치하도록 설정됩니다. 오타가 아닌 경우 연결 문자열을 절대 바꾸지 않습니다.

+0

DB 이름을 변경하고 실수로 수정했습니다. 내가 다시 내 질문을 읽고 고칠 때 그것을 보았다. 그러나 변환이 올바르게 작동하고 문제가 계속 발생하지 않도록하십시오. – AdrianoRR

+0

아, 그럼 내 대답은 마음에 듭니다. – brenton

관련 문제