2012-04-12 4 views
3

꽤 큰 프로젝트를 시작하려고합니다. 그래서 프로젝트 문서 및 클라이언트 요청을 읽는 동안 예상 한 몇 가지 문제에 대한 정보를 수집하고 있습니다. 그 중 하나는 다음과 같습니다.한 응용 프로그램에서 여러 데이터베이스 사용하기

내 고객은 여러 개의 구획이 있고 각 구획이 고유 한 데이터베이스를 사용하는 회사입니다. 이제는 모든 하위 섹션을 사용할 관리 응용 프로그램을 만드는 것입니다 (모두 동일한 작업을 수행하며 지리적 위치와 제 질문에 중요하지 않은 몇 가지 법적 규제로 인해 분할됩니다) . 그래서, 내 문제는 데이터베이스간에 전환 할 수있는 응용 프로그램을 만드는 방법입니다. 일반적으로 사용자가 사용할 연결을 선택할 수있는 입력 용 입력란 (예 : textBoxes 또는 comboBoxes)이 포함 된 WinForm을 만들어서이 작업을 수행 할 수 있지만 이러한 응용 프로그램에서 생성해야하는 보고서로 인해이 접근법에 문제가 있습니다. 지금까지 TableAdapters가 만든 데이터 집합을 사용하는 .rdlc 보고서로 작업했습니다. 따라서 프로그래밍 방식으로 데이터 집합을 만드는 경우 보고서를 생성하는 방법을 알지 못합니다. 그러나 TableAdapters 데이터 세트를 기반으로 보고서를 작성하는 경우 TableAdapters 연결 문자열을 변경하는 방법을 알지 못합니다 (TableAdapter 복제를 제외하고 각각 다른 연결 문자열을 사용하지만 이는 효율적이지 않습니다). 저는 C#을 사용하여 데이터베이스와 작업 할 WinForms 및 SQL을 만듭니다. 이 문제를 도와주세요. 감사

답변

1

여러 웹 서비스의 조합과 같은 이미지의 오른쪽 나무와 같은 servicebus를 사용해보십시오 :

enter image description here

이 고급 C#을하지만, 아주 유지 보수 및 낮은 결합이므로주의 해주십시오! 이를 위해

+0

당신이 공유 할 수 그 방법에 대한 몇 가지 링크가 있습니다. 이전에 그들과 함께 일한 적은 – NDraskovic

+0

http://ayende.com/blog/3752/rhino-service-bus –

2

나는이 응용 프로그램에서 다른 데이터베이스의 어떤을 추가 할 경우에도 적절한 데이터베이스 객체를 생성하지 데 도움이 될 것입니다 당신은 객체 생성에 대한 공장 디자인 패턴 갈 제안 할 수

//factory inerface 
public inteface DataBaseCommonFactory() 
{ 
    ///you all coomon methods are here 
    public bool createuser(); 
} 


//DAtabase specifc classes 

//sql server 
public class SqlServer : DataBaseCommonFactory 
{ 
    public bool createuser() 
    { 
     //implementation 
    } 
} 

//oracle server 
public class OracleServer : DataBaseCommonFactory 
{ 
    public bool createuser() 
    { 
     //implementation 
    } 
} 


//mysql server 
public class MySqlServer : DataBaseCommonFactory 
{ 
    public bool createuser() 
    { 
     //implementation 
    } 
} 


public class DataBaseCreationFactory 
{ 
    public DataBaseCreationFactory(string DatabaseType)//this might be enum 
    { 
     if(DatabaseType == "Sqlserver") 
     return new SqlSErver(); 
     if(DatabaseType == "Oracleserver") 
     return new OracleSErver(); //same for mysql or anyother datavase 
    } 
} 


public class Client 
{ 
    public void mymethod() 
    { 
     DataBaseCommonFactory sqlobject = new DataBaseCreationFactory("Sqlserver") 
     sqlobject.CreateUser(); 
     //if oracle is ther than parameter is orcalserver - or anyother database 
    } 
} 
+0

app.config에서 연결 문자열을 가져 오는 것에 대해 읽은 적이 있는데, 그것을 TableAdapters에 적용합니다. 그런 식으로 다른 데이터베이스에서 동일한 TableAdapter를 사용할 수 있습니다 (모든 데이터베이스의 모든 테이블은 동일한 스키마를가집니다). 그게 더 쉬울 까? 그렇다면 어떻게해야합니까? – NDraskovic

+0

@NDraskovic - 당신이 그걸로 갈 수 있겠지 만이 패턴을 사용하면 mainitan 코드를 쉽게 작성할 수 있습니다. 다른 데이터베이스의 경우에는 differernt 제공자가 있습니다. 무늬.. –

관련 문제