-2

我在 c# 中创建一个表单,因此任何新表单都继承了内置类的属性 From 我还创建了一个名为 program 的类,它开始与我的数据库的连接我希望我的所有表单都继承它,因为我不想打开我无法使用接口的每个表单都有一个新连接,因为程序包含 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

您不能在 C# 中进行多个类继承。但是,出于您的目的,您可以阅读有关连接池概念的信息

连接到数据源可能很耗时。为了最大限度地降低打开连接的成本,ADO.NET 使用了一种称为连接池的优化技术,它可以最大限度地降低重复打开和关闭连接的成本。对于 .NET Framework 数据提供程序,连接池的处理方式不同。

于 2012-10-09T21:33:52.870 回答
0

对不起,但你真的问错了这个问题。处理您所要求的内容的适当方法不是通过多重继承,甚至不是 FormBase。您应该考虑使用强类型数据集、LINQ-to-SQL实体框架

即使您使用的是原始 ADO.NET,也不应该以这种方式挂在数据库连接上。特别是如果有任何东西是多线程的,这将严重崩溃。

不要在 main 中创建连接,而是在 app.config 中使用ConnectionString 设置,并根据需要在实际工作的地方打开和关闭连接。ADO.NET 底层的连接池将负责为您最大限度地减少连接建立和拆除的费用,并且不会因多线程而受到影响。

于 2012-10-09T21:41:54.147 回答