2013-02-19 4 views
2

vs2010 이전 버전에 대한 해결책을 찾았습니다. vs2010에서이 작업을 수행하는 방법을 알고 싶습니다. 아는 사람 있나요? 런타임에 데이터 세트 연결 문자열 변경 vs2010

http://www.csharpbydesign.com/2008/01/overriding-dataset-settings-co.html

나를 좀 더 자세하게 설명하겠습니다.

나는 C# 생성 된 데이터 집합이 있습니다. 연결 문자열을 어떻게 변경하여 다른 (동일하게 구조화되었지만 다른 채워진) 데이터베이스와 함께 데이터 집합을 사용할 수 있습니까? 이것은 컴파일 타임에 서버 또는 데이터베이스 이름을 알지 못하기 때문에 런타임에 발생해야합니다. 안녕하세요, vs2010 및 SQL Server 2008 R2 Express를 사용 중입니다

+0

무엇을 의미합니까?런타임에 하나의 연결에서 읽기를 시작한 다음 읽기 중간에 연결을 전환하고 싶습니까? –

+0

desinger를 통해 생성 된 강력하게 형식화 된 데이터 집합이라는 의미입니다. –

답변

5

나는 간단한 방법이 없으며 TableAdapter에 대해 설정되어 있으므로 DataSet 전체에 대해 프로그래밍 방식으로 연결 문자열을 변경할 수 없다고 생각합니다.

Connection 속성이 internal (DAL이 다른 어셈블리에있는 경우)이므로 연결 문자열을 변경하려면 TableAdapter의 부분 클래스를 사용하거나 작성해야합니다. designer.cs 파일은 디자이너의 다음 변경 후에 자동으로 다시 작성되므로 변경하지 마십시오. 그것을 만들려면 데이터 세트를 마우스 오른쪽 버튼으로 클릭하고 "코드보기"를 선택하십시오.

은 (예를 들어 TableAdapterProductTableAdapter라는 가정) :

namespace WindowsFormsApplication1.DataSet1TableAdapters 
{ 
    public partial class ProductTableAdapter 
    { 
     public string ConnectionString { 
      get { return Connection.ConnectionString; } 
      set { Connection.ConnectionString = value; } 
     } 
    } 
} 

지금 당신은 쉽게 변경할 수 있습니다 : 여기

var productTableAdapter = new DataSet1TableAdapters.ProductTableAdapter(); 
productTableAdapter.ConnectionString = someOtherConnectionString; 

내 샘플 데이터 집합의 screesnhot과 생성 된 파일 DataSet1.cs입니다 :

enter image description here

+0

도움 Tim을 보내 주셔서 감사합니다. 코드를 추가하려고하면 연결을 찾을 수 없습니다. – user1304232

+0

@ user1304232 : DataSet 디자이너와 같은 이름의 클래스를 만들었습니까? 'partial' 속성과 정확한 네임 스페이스가 중요합니다. '... designer.cs' 파일의 이름을 잘 모르는 경우이 파일을보십시오. 내 대답을 편집하여 스크린 샷을 표시합니다. –

+0

알았어. 그게 내가 필요한거야. 감사. – user1304232

0

실제로 연결 문자열을 변경하는 훨씬 쉬운 방법이 있습니다. 연결 문자열이 연결 문자열로 표시되는 설정 화면으로 이동하십시오. 먼저 표시되는 연결 문자열을 표시하고 복사하십시오. 그런 다음 연결 문자열에서 문자열로 유형을 변경하십시오. 문자열의 텍스트가 xml을 포함하도록 변경됩니다. 그런 다음 복사 한 연결 문자열을 xml 텍스트 위에 붙여 넣습니다. 그런 다음 범위를 응용 프로그램에서 사용자로 변경하십시오.

연결 문자열을 변경하려면 다음 코드를 사용합니다.

// assign the path to use to the variable fullpath (or whatever) 
string newConnection = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", fullpath);    
Properties.Settings.Default.HootConnectionString = newConnection; 
Properties.Settings.Default.Save(); 

필자의 경우 전역 데이터 집합이 활성화되어 있으므로 테이블 어댑터에서 데이터를 다시 읽어야합니다. 물론 오류 제어를 추가하여 데이터베이스가 아직 있는지 확인해야합니다.

응용 프로그램 설정에 표시되는 내용은 변경되지 않습니다. 그것들은 기본값입니다.

이것은 Access 데이터베이스에서 작동합니다. 따라서 귀하의 마일리지 및 요구 사항은 다를 수 있습니다.

편집 :주의 사항. 그것이 작동 할 때, 설치 될 때 연결 문자열은 데이터베이스 내용을 열고 읽는 데 적합하지만 데이터베이스를 업데이트하려고 할 때 연결 문자열이 없다는 것에 대해 불평합니다.

관련 문제