2015-10-15 105 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