-2

私はc#でフォームを作成しているので、新しいフォームはクラス内のビルドのプロパティを継承します。データベースへの接続を開始するプログラムというクラスも作成しました。開きたくないので、すべてのフォームにそれを継承させたいと思いますすべてのフォームの新しい接続 プログラムには接続を作成する main() が含まれているため、インターフェイスを使用できません 私のプログラムクラスは

      class Program
      {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {

        MySqlConnection myConnection = new MySqlConnection("Server=instance2813231.db.xeround.com;Port=18422;Database=shares info;Uid=user;Pwd=password;");
        MySqlCommand command = myConnection.CreateCommand();

        try
        {

            myConnection.Open();
            MessageBox.Show("connected");


        }
        catch (Exception a)
        {
            Console.WriteLine(a.ToString());
            MessageBox.Show("Failed");
        }
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

どうすればこれを回避できますか?

4

4 に答える 4

6

すべてのフォームに継承させたい

だめだ、やめろ。これは、非常に貧弱な方法でコードを再利用するための継承の悪用です。

まず、GUI コードをデータベース コードから分離してみてください。

次に、継承よりも構成を優先します。フォームは、論理的にはProgram「データベース接続オープナー」ではありません。後者を使用する必要がありますが、そうではありません。必要なものをインスタンス化して実行を開始する単一のエントリ ポイントが必要です。

第三に、コードで単一の接続を使用しないでください。代わりに、必要に応じて接続を開いたり閉じたりし、接続プーリングに効率の側面を任せてください。

したがって、クラスから派生する代わりに、各フォームにデータベース接続オープナーのインスタンスへの参照を提供します (データベースと GUI コードを本当に混在させたい場合は... ick)、フォームでそのオープナーを使用できます。

于 2012-10-09T21:54:25.050 に答える
1

多重継承を行うことはできません。できることは、FormBaseを継承してからSystem.Windows.Forms.Form、すべてのフォームを から継承させることFormBaseです。

于 2012-10-09T21:30:34.367 に答える
0

申し訳ありませんが、あなたは本当に間違った質問をしています。あなたが求めているものを処理する適切な方法は、多重継承や FormBase を使用することではありません。厳密に型指定されたDataSetLINQ-to-SQL、またはEntity Frameworkの使用を検討する必要があります。

生の ADO.NET を使用している場合でも、そのようにデータベース接続に固執するべきではありません。特に何かがマルチスレッド化されると、これはひどく壊れます。

メインで接続を作成しないでください。代わりに、app.config でConnectionString 設定を使用し、実際に作業を行っている場所で必要に応じて接続を開いたり閉じたりします。ADO.NETの基礎となる接続プーリングは、接続のセットアップと切断の費用を最小限に抑え、マルチスレッドによって失敗することはありません。

于 2012-10-09T21:41:54.147 に答える
0

C# では複数のクラス継承を行うことはできません。ただし、目的のために、接続プーリングの概念について読むことができます

データ ソースへの接続には時間がかかる場合があります。接続を開くコストを最小限に抑えるために、ADO.NET は接続プーリングと呼ばれる最適化手法を使用します。これにより、接続を繰り返し開いたり閉じたりするコストが最小限に抑えられます。.NET Framework データ プロバイダーでは、接続プールの処理が異なります。

于 2012-10-09T21:33:52.870 に答える