2012-04-12 113 views
3

我即将开始一个非常大的项目,因此我正在收集有关在阅读项目文档和客户端请求时预测的一些问题的信息。其中一个问题是这样的:在一个应用程序中使用多个数据库

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

回答

1

尝试使用多个web服务的组合和下图中像右手树servicebus:

enter image description here

请注意,这是先进的C#,但很容易维护和低耦合!

+0

你能分享一些链接如何做到这一点,我从来没有与他们合作 – NDraskovic 2012-04-12 08:23:30

+0

http://ayende.com/blog/3752/rhino-service-bus – 2012-04-12 08:25:25

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中拉取连接字符串,并将其应用于TableAdapter。这样我可以在不同的数据库上使用相同的TableAdapter(所有数据库中的所有表都具有相同的模式,它们只是保存不同的数据)。那不是那么容易吗?如果是的话,我该怎么做? – NDraskovic 2012-04-12 08:31:41

+0

@NDraskovic - 多数民众赞成你可以去那,但我建议去与这种模式,这样你就可以轻松地mainitan代码....对于不同的数据库有不同的提供商,你需要maange,你可以用这个做模式.. – 2012-04-12 09:46:18

相关问题