2011-02-09 4 views
0

SQL Server와 통신하는 데이터 집합을 추가 한 클래스 라이브러리 프로젝트가 있습니다. 이 프로젝트의 출력은 웹 응용 프로그램 프로젝트에서 소비됩니다. 그래서 웹 응용 프로그램 프로젝트에 연결 문자열을 넣을 예정입니다.app.config 대신 web.config에서 connectionstring을 사용합니다.

몇 가지 작업을 수행했습니다. 내 어댑터가 다른 연결 문자열을 사용하게하려면 this을 발견했습니다. 그러나 나는 마침내 다음과 같은 편리함을 찾았습니다.

그런 다음 구성 (app.config)의 연결 문자열을 시뮬레이션 종류로 가져 가려고했습니다. 섹션 "myconstr"을 수동으로 추가했습니다. 제 아이디어는 다음과 같이하는 것입니다 :

sMyConnectionString = ConfigurationManager.ConnectionString("myconstr").ConnectionString 

그러나 IntelliSense가 ConfigurationManager를 감지하지 못했습니다. 프로젝트에 적절한 참조를 추가해야했습니다.

다음 웹 응용 프로그램 프로젝트의 설정 디자이너를 통해 연결 문자열을 추가했습니다. 나는 그것을 참조하기 위해 위의 열쇠를 주었다. 그러나 위의 문장은 null 참조 예외를 던질 것으로 보인다.

+0

당신이뿐만 아니라의 Web.config의 사본을 게시 할 수 없습니다 : 여기

내가 같은를 위해 연결 한 작은 프로젝트 샘플입니다. –

+0

web.config에서 'connectionStrings'섹션을 표시 할 수 있습니까? – Egor4eg

+0

질문을하고 결코 당신을 도우려는 사람들과 상호 작용할 수 없습니다! – lKashef

답변

1

클래스 라이브러리를 생성했다고 가정합니다. 그것은 당신 같은가는 설정 속성을 정의했습니다 :

Properties.Settings.Default.ProjectName 

다음과 같이 스튜디오가 자동으로 당신을 위해 몇 가지 구성을 생성 할 수 있습니다 시각 :

(의 app.config)

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <section name="MyDllProject.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     </sectionGroup> 
    </configSections> 
    <applicationSettings> 
     <MyDllProject.Properties.Settings> 
      <setting name="ProjectName" serializeAs="String"> 
       <value>MyDllproject</value> 
      </setting> 
     </MyDllProject.Properties.Settings> 
    </applicationSettings> 
</configuration> 

이제이 어셈블리를 프로젝트에 추가한다고 가정 해보십시오. 그리고 설정에 액세스하면 아마도 MyDllproject이됩니다. 이것은 모든 구성을 추가 함에도 불구하고 있습니다. 왜? 어셈블리가 생성되었을 때 그 어셈블리에 쓰여졌 기 때문에. 작성된 코드는 구성 오버라이드가없는 경우 생성시 app.config에 정의 된 것을 사용하는 코드입니다.

은 이제 대상 프로젝트에, 당신은 단순히 다음과 같은 패턴으로 구성 파일에

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 

     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <!-- start: copied from app.config of class library --> 
      <section name="MyDllProject.Properties.Settings" 
       type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" 
       /> 
      <!-- end: copied from app.config of class library --> 

      <!-- other sections may follow --> 
     </sectionGroup> 

    </configSections> 

    <applicationSettings> 
     <!-- remember to maintain the same order as how it was defined in the sectionGroup --> 

     <!-- start: copied from app.config of class librarly --> 
     <MyDllProject.Properties.Settings> 
      <setting name="ProjectName" serializeAs="String"> 
       <value>ConsoleProjectB</value> 
      </setting> 
     </MyDllProject.Properties.Settings> 
     <!-- end: copied from app.config of class library --> 

     <!-- other configurations settings may follow --> 
    </applicationSettings> 
</configuration> 

그게 전부가 필요한 부분을 추가합니다. http://sdrv.ms/16ksPef

0

당신은 System.Web에 대한 참조를 추가하고 클래스 라이브러리 프로젝트

0

클래스 라이브러리 프로젝트에 정의 된 구성 파일 (app.config)이 될 수 없습니다에서 System.Web.Configuration.WebConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString)을 사용할 수 있습니다 - 자동 - 시스템에 의해 소비. 소비 될 수있는 유일한 구성 파일은 웹 응용 프로그램에서 web.config 파일이거나 exe 파일이 *myexe.exe* 인 exe 응용 프로그램에서 *myexe.exe*.config입니다.

따라서 app.config을 클래스 라이브러리에 추가하려고하는 것 같습니다. 그게 효과가 없을거야.

두 번째 구성 파일을 web.config에 연결할 수는 있지만 probbaly는 도움이되지 않습니다.

0

기본적으로 외부에서 라이브러리의 전역 매개 변수를 변경할 수 있습니다. app.config를 단독으로 사용해도 그럴 가능성은 희박합니다. 아직 라이브러리 내부 설정을 공개하지 않았습니다. 이를 염두에두고 노출을 달성하는 한 가지 방법은 app.config에 할당자를 라이브러리에 만드는 것입니다.

public static class Setter 
{ 
    public static void Set(string name, string value) 
    { 
     Properties.Settings.Default[name] = value; 
    } 
} 

그런 다음, 웹 응용 프로그램에서 다른 곳의 Global.asax에서 시작하거나 : 귀하의 질문에서

MyLibrary.Setter.Set("X", ConfigurationManager.ConnectionStrings["Y"].ConnectionString); 
-1

을 당신이하는 n 계층 응용 프로그램을 구축하는 것 같아요. 네가 언급 한 두 가지 옵션에서 더 나아 졌다고 생각해.

연결 문자열을 포함하는 공용 속성을 가질 DAL (데이터 액세스 계층) 클래스의 기본 클래스를 만들어야합니다.BTW

이/숨길 수 있도록하는 대신 쉽게이 누군가에 의해 읽거나 호스트에 대한 액세스를 얻을 수있는 파일에 저장의 연결 문자열을 확보

public class DALBase 
{ 
    public static string connString 
    { 
     get { return "Data Source=localhost\\SqlExpress;Initial Catalog=theDb Integrated Security=True"; } 
    } 
} 
+0

conenction 문자열을 하드 코딩하고 있습니까? –

관련 문제