2010-04-07 2 views
1

클래스 라이브러리가 있는데, 내부에는 DataSet (MySQL 커넥터)과 Connector 클래스가 있습니다.C# 라이브러리 내부에 존재하는 연결 문자열을 수정하십시오.

여러 프로젝트에서이 클래스를 사용하여 데이터베이스에 연결하고 있으며 항상 연결 문자열에 암호가 포함되어 있지만 보안을 위해이 문자열을 수정할 수 있어야 사용자를 가질 수 있습니다. 자신의 계정을 사용하여 연결하십시오.

어떻게이 연결 문자열을 수정할 수 있습니까?

나는 다음과 같은

Properties.Settings.Default.DataBaseConnectionString = "String"; 

을 시도하지만 세터 값이 표시되지 않습니다 becase 연결 문자열은 읽기 전용 것 같다.

나는 또한

Properties.Settings.Default.DatabaseConnectionString.Insert(
Properties.Settings.Default.DatabaseConnectionConnectionString.Length - 1, 
      "Password=dbpassword;"); 

답변

5

당신은 다음과 같이 수정할 수 있습니다 :

Properties.Settings.Default["MyConnectionString"] = newCnnStr; 

을 또한 파일에 새 값을 저장하는 전체 솔루션의 경우 같은 것을 할 필요가 :

private static void ModifyConnectionStrings() 
    { 
     // Change the value in the config file first 
     var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     const string newCnnStr = "server=(local);database=MyDb;user id=user;password=secret"; 
     config.ConnectionStrings.ConnectionStrings["MyProject.Properties.Settings.MyConnectionString"].ConnectionString = newCnnStr; 
     config.Save(ConfigurationSaveMode.Modified, true); 

     // Now edit the in-memory values to match 
     Properties.Settings.Default["MyConnectionString"] = newCnnStr; 
    } 

데이터 집합이 다른 어셈블리에있는 경우 해당 어셈블리에 대한 설정을 공개로 제공하면 여전히이 작업을 수행 할 수 있습니다. 이렇게하려면 :

  1. 마우스 오른쪽 단추로 클릭 솔루션 탐색기에서 프로젝트를하고 속성
  2. 을 클릭 설정을 탭을 클릭합니다.
  3. 액세스 수정 자 드롭 다운을 "공개"로 변경하고 저장하고 닫습니다.

그런 다음 당신은 (다른 프로젝트가 "MyProject.DataLayer"라고 가정)이 작업을 수행 할 수 있습니다

private static void ModifyConnectionStrings() 
    { 
     // Change the value in the config file first 
     var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     const string newCnnStr = "server=(local);database=MyDb;user id=user;password=secret"; 
     config.ConnectionStrings.ConnectionStrings["MyProject.Properties.Settings.MyConnectionString"].ConnectionString = newCnnStr; 
     config.ConnectionStrings.ConnectionStrings["MyProject.DataLayer.Properties.Settings.MyConnectionString"].ConnectionString = newCnnStr; 
     config.Save(ConfigurationSaveMode.Modified, true); 

     // Now edit the in-memory values to match 
     Properties.Settings.Default["MyConnectionString"] = newCnnStr; 
     MyProject.DataLayer.Properties.Settings.Default["MyConnectionString"] = newCnnStr; 
    } 
+1

omg 감사합니다. SOOOOO MUCH –

+0

매우 환영합니다. –

+0

다른 어셈블리 (예 : 데이터 세트가있는 데이터 레이어 프로젝트가있는 경우)의 연결 문자열을 고려하여 업데이트되었습니다. –

0

는 해당 클래스의 소스 코드가없는 행운과 함께 다음과 같은 시도?

또한 ReflexilAddIn과 함께 Reflector을 사용하는 것이 더 복잡 할 수 있습니다.

+0

나는 소스 코드는 내 자신의 프로젝트를 수행합니다. 하지만 연결 문자열을 수정하는 방법을 알아낼 수 없습니다. –

-1

구성 파일에서 연결 문자열을로드하는 것처럼 보입니다. 거기에서 변경할 수 있어야합니다. 일단 빌드되면 컴파일 된 양식과 .config 파일과 동일한 이름의 파일이됩니다. (예를 들어 application.exe.config)

+0

내가 왜 투표를했는지 모르겠지만 런타임에 수정할 수는 있지만 일반적으로 응용 프로그램 외부의 구성 변경이 제대로 작동하지 않을 정도로 자주 연결 문자열이 변경됩니다. 최상의 답변이지만 downvote는 가혹한 것입니다. IMO – Guvante

+0

나는 당신에게 다운 다운을하지 않았지만 질문을 더 자세히 읽을 필요가 있습니다. "이 문자열을 수정할 수 있어야합니다. 사용자는 자신의 계정을 사용하여 연결합니다. " –

+0

정확한 문자열은 IT 직원이 비즈니스 중심 응용 프로그램을 완벽하게 유지 관리 할 수 ​​있도록 완벽하게 작동합니다. .config 파일에서 XML을 변경하는 데 문제가없는 사용자. 또는 설치 파일에 의해 설정 될 수도 있습니다. 응용 프로그램 외부에서 수정하면 나쁜 생각이 아닙니다. – Guvante

0

응용 프로그램을 사용하는 사람에 따라 런타임에 연결 문자열 속성을 변경하는 방법을 묻는 것 같습니다. 희망이 도움이됩니다.

이전에는 연결 문자열에 string.Format을 사용하여 제공 할 수있는 매개 변수를 포함시켜이 작업을 수행했습니다.

<connectionStrings> 
     <add name="SomeDB" connectionString="("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Database Password={1}"" /> 
    </connectionStrings> 

string connectionString = string.Format(ConfigurationManager.ConnectionStrings["SomeDB"].ConnectionString, location, password); 
+0

이것은 완벽 해 보이지만 어떻게 내 문자열을 사용하여 데이터 세트와 모든 어댑터를 연결/다시 연결할 수 있습니까? –

+1

이것은'var adapter = new MyTableAdapter()'에서 작동하지 않을 것입니다. 왜냐하면 그것이 파일로부터 직접 값을로드 할 것이기 때문입니다. 명시 적으로 Connection 객체를 생성하고 매번'TableAdapter.Connection' 속성을 설정해야합니다. –

+0

Neil Barnwell의 대답을 살펴보면 Properties.Settings.Default [ "MyConnectionString"]을 사용하면 해당 연결 문자열을 사용하는 모든 테이블을 자동으로 업데이트합니다. –

관련 문제