2012-04-12 4 views
3

Я собираюсь запустить довольно большой проект, поэтому я собираю информацию о некоторых проблемах, которые я предсказал при чтении проектной документации и клиентских запросов. Одна из таких проблем заключается в следующем:Использование нескольких баз данных в одном приложении

Мой клиент - компания, которая имеет несколько подразделений, и каждое из этих подразделений использует свою собственную базу данных. Теперь у меня есть задача сделать приложение администрирования, которое будут использовать все эти подразделения (все они выполняют одни и те же задачи, они просто разделены из-за их географических местоположений и некоторых правовых норм, которые не важны для моего вопроса) , Итак, моя проблема заключается в том, как создать приложение, которое сможет переключаться между базами данных. Обычно я мог бы сделать это, создав WinForm, который будет содержать поля ввода (например, textBoxes или comboBoxes), где пользователь может выбрать, какое соединение использовать, но у меня есть проблема с этим подходом из-за отчетов, которые эти приложения должны генерировать. До сих пор я работал с отчетами .rdlc, которые используют наборы данных, созданные TableAdapters. Поэтому, если я создаю набор данных программным образом, я не знаю, как создать отчет. Но, если я создаю отчет на основе набора данных TableAdapters, я не знаю, как изменить строку подключения TableAdapters (за исключением дублирования TableAdapters, поэтому каждый использует другую строку соединения, но это неэффективно вообще). Я использую C# для создания WinForms и SQL для работы с базами данных. Пожалуйста, помогите мне с этой проблемой. Благодаря

ответ

1

Попробуйте использовать комбинацию из нескольких вебов-сервисов и ServiceBus как правое дерево в следующем изображении:

enter image description here

Пожалуйста, обратите внимание, что это продвинутый C#, но очень ремонтопригодны и его низкое в сочетании!

+0

Можете ли вы поделиться некоторые ссылки о том, как это сделать, я никогда не работал с ними до – NDraskovic

+0

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

2

Для этого я могу предложить вам пойти на Factory Design шаблон для создания объекта, это поможет вам не создать надлежащий объект базы данных, даже если добавить какой-либо не из другой базы данных в приложении

//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 ... для другой базы данных существуют разные поставщики, которые вам нужны, чтобы вы могли с этим справиться шаблон.. –

Смежные вопросы