在一个应用程序中使用多个数

时间:2012-04-12 08:14:40

标签: c# sql design-patterns rdlc multiple-databases

我即将开始一个非常大的项目,因此我收集了有关我在阅读项目文档和客户请求时预测的一些问题的信息。其中一个问题是:

我的客户是一家拥有多个细分的公司,每个细分都使用自己的数据库。现在,我的任务是制作一个所有这些细分都将使用的管理应用程序(它们都执行相同的任务,因为它们的地理位置和一些对我的问题不重要的法律规定而被划分) 。所以,我的问题是如何创建一个能够在数据库之间切换的应用程序。通常,我可以通过创建一个包含输入字段的WinForm来实现它(例如textBoxes或comboBoxes),用户可以选择使用哪个连接,但由于这些应用程序必须生成的报告,我遇到了这种方法的问题。到目前为止,我一直在使用.rdlc报告,它们使用TableAdapters创建的数据集。因此,如果我创建一个programmaticaly数据集,我不知道如何生成报告。但是,如果我基于TableAdapters数据集创建报表,我不知道如何更改TableAdapters连接字符串(复制TableAdapter除外,因此每个连接字符串使用另一个连接字符串,但根本不高效)。我正在使用C#创建WinForms和SQL来处理数据库。请帮我解决这个问题。 感谢

2 个答案:

答案 0 :(得分:2)

尝试在下图中使用多个Web服务和servicebus(如右侧树)的组合:

enter image description here

请注意,这是高级C#但非常可维护且低耦合!

答案 1 :(得分: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
    }
}