2015-10-15 2 views
0

Добрый день, Я пытаюсь создать приложение для форм Windows, которое требует подключения к одной из наших баз данных.Приложение Windows Forms C#: добавление глобальных переменных:

Я могу подключиться к базе данных с помощью объектов System.Data.Odbc.

У меня нет проблем с созданием объектов OdbcConnection в локальных функциях, их открытием, чтением данных и их закрытием. Однако для моих форм требуется множество запросов для отправки, поэтому я хочу избежать открытия и закрытия соединения каждый раз, когда я хочу запросить базу данных.

Теперь подход, который я хотел принять, состоял в том, чтобы объявить объект OdbcConnection как поле моего класса Forms, а затем открыть его в методе InitializeComponent(), чтобы соединение с базой данных было открытым на протяжении всей Формы и закройте его только при закрытии формы.

Но это проблема, потому что Visual Studio не хочет меня изменять что-либо в InitializeComponent(), все, что должно быть создано конструкцией формы от моего имени, поэтому я не могу самостоятельно открыть OdbcConnection.

Каков чистый способ выполнения этого?

Благодаря

+0

Если вы используете '' command' и объекты Connection' Это лучше, чтобы открыть и закрыть соединение самостоятельно. Если вы используете 'DataAdapter', вы можете позволить адаптеру управлять состоянием соединения. –

+0

Определите конкретный класс для этого и примените/используйте шаблон singleton. Подробнее здесь: [link] (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