3

我即将开始一个相当大的项目,所以我正在收集有关我在阅读项目文档和客户请求时预测的一些问题的信息。其中一个问题是:

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

4

2 回答 2

2

尝试使用多个 Web 服务和服务总线的组合,如下图右侧的树:

在此处输入图像描述

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

于 2012-04-12T08:21:23.673 回答
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
    }
}
于 2012-04-12T08:24:07.730 回答