2015-10-15 108 views
0

美好的一天, 我正试图制作一个需要连接到我们的数据库之一的Windows窗体应用程序。Windows窗体应用程序C#:添加全局变量:

我可以通过System.Data.Odbc对象连接到数据库。

我没有问题在本地函数中创建OdbcConnection对象,打开它,读取数据并关闭它。然而,我的表单需要发送很多查询,因此我希望避免每次查询数据库时打开和关闭连接。

现在,我想要的方法是声明一个OdbcConnection对象作为我的Forms类的字段,然后在InitializeComponent()方法中打开它,让数据库连接在Form的持续时间内打开,并且只有在表格关闭时才关闭它。

但是,这是一个问题,因为Visual Studio不希望让我修改InitializeComponent()中的任何内容,所有必须由我的代表的Form设计创建,所以我无法自己打开OdbcConnection。

完成此操作的干净方式是什么?

感谢

+0

如果你正在使用'Command'和'Connection'对象这是更好地打开和关闭连接自己。如果您使用'DataAdapter',则可以让适配器控制连接状态。 –

+0

定义一个特定的类来执行此操作,并应用/使用单例模式。阅读更多:[链接](http://csharpindepth.com/Articles/General/Singleton.aspx) – Maarten

+0

@Maarten我认为分享连接不是一个好主意。 ADO.Net'会根据需要使用连接池来完成。但是如果OP想要表现得不那么好,那么使用singleton是一个很好的选择。 –

回答

0

如果您正在使用Command对象这是更好地打开和关闭连接自己。如果您使用的是DataAdapter,则可以让适配器控制连接状态。

您应该知道共享连接并不是一个好主意。如果需要,ADO.Net将使用连接池来完成它,我建议您手动打开和关闭连接。

但是根据您的要求在这里你可以使用代码:

public class Form1:Form 
{ 
    public Form1() 
    { 
     InitiallizeComponent(); 
    } 

    private OdbcConnection connection; 

    //If you want to open and close connection automatically uncomment commented codes 
    //Then you don't need to open and close connection manually 
    protected override void OnLoad(EventArgs e) 
    { 
     connection= new OdbcConnection("your connection string here"); 
     //this.Connection.Open(); 
     base.OnLoad(); 
    } 

    protected override void OnClosing(CancelEventArgs e) 
    { 
     //this.Connection.Close(); 
     this.Connection.Dispose();   
     base.OnClosing(e); 
    } 
} 
1

为什么你不能只写

public partial class credentials : Form 
    { 
    private Connection con; 

     public credentials() 
     { 
      InitializeComponent(); 
      con = new Connection(); 
     } 
} 
+2

好电话,我试了一下,它的工作。我害怕Visual Studio抱怨,如果我混淆构造函数,但事实证明它只是抱怨,如果我搞砸InitializeComponent(); – ForeverStudent