3

私はかなり大規模なプロジェクトを開始しようとしているので、プロジェクトのドキュメントとクライアントの要求を読んで予測したいくつかの問題について情報を収集しています。それらの問題の1つはこれです:

私のクライアントは、複数の下位部門を持つ会社で、各下位部門が独自のデータベースを使用しています。今、私の仕事は、これらすべての下位部門が使用する管理アプリケーションを作成することです (それらはすべて同じタスクを実行します。地理的な場所と、私の質問にとって重要ではない法的規制のために分割されているだけです)。 . だから、私の問題は、データベースを切り替えることができるアプリケーションを作成する方法です。通常、ユーザーが使用する接続を選択できる入力用のフィールド (textBoxes やomboBoxes など) を含む WinForm を作成することでそれを行うことができますが、これらのアプリケーションが生成する必要があるレポートのために、このアプローチには問題があります。これまで、TableAdapter によって作成されたデータセットを使用する .rdlc レポートを使用してきました。したがって、プログラムでデータセットを作成すると、レポートを生成する方法がわかりません。ただし、TableAdapters データセットに基づいてレポートを作成する場合、TableAdapters 接続文字列を変更する方法がわかりません (TableAdapters を複製して、それぞれが別の接続文字列を使用することを除きますが、それはまったく効率的ではありません)。C# を使用して WinForms と SQL を作成し、データベースを操作しています。この問題で私を助けてください。ありがとう

4

2 に答える 2

2

次の画像の右側のツリーのように、複数のWebサービスとサービスバスを組み合わせて使用​​してみてください。

ここに画像の説明を入力してください

これは高度なC#ですが、非常に保守性が高く、結合が少ないことに注意してください。

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