none
Глобальные переменные или что-то похожее в C# RRS feed

  • Вопрос

  • Здравствуйте. В процессе написания курсовой работы вновь возникла очередная проблема, связанная с областью видимости переменных:

    Есть два обработчика, первый из которых открывает подключение, а второй должен закрывать. Но проблема в том что переменная DataContext db не видна во втором обработчике, как это исправить?

     private void Connect_Click(object sender, System.Windows.RoutedEventArgs e)
            {
                DataContext db = new DataContext("Persist Security Info=False;User ID=" + login + ";Password=" + password + ";Initial Catalog=" + data + ";Data Source=\"" + server + "\"");
            }
    
            private void Disconnect_Click(object sender, System.Windows.RoutedEventArgs e)
            {
            	//а вот тут нужно сделать db.Dispose();
                    //но переменную не видно :-(
                    //что делать???
            }
    


    MSDN AA User
    18 января 2012 г. 12:30

Ответы

  • > переменная DataContext db не видна во втором обработчике, как это исправить?


    вынести определение DataContext db; за пределы метода.
    примерно так:
     
    DataContext db;
    private void Connect_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        if(db == null)
        { 
          ... создать db;
        }  
    }
    private void Disconnect_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        if(db != null)
        {
            ...
        }
    }
    


    а вообще соединение лучше не держать открытым.
    его надо закрыать сразу после использования.
        
      
    • Изменено Malobukv 18 января 2012 г. 13:04
    • Помечено в качестве ответа asdfxcbneftyherwe 18 января 2012 г. 13:07
    18 января 2012 г. 13:03

Все ответы

  • > переменная DataContext db не видна во втором обработчике, как это исправить?


    вынести определение DataContext db; за пределы метода.
    примерно так:
     
    DataContext db;
    private void Connect_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        if(db == null)
        { 
          ... создать db;
        }  
    }
    private void Disconnect_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        if(db != null)
        {
            ...
        }
    }
    


    а вообще соединение лучше не держать открытым.
    его надо закрыать сразу после использования.
        
      
    • Изменено Malobukv 18 января 2012 г. 13:04
    • Помечено в качестве ответа asdfxcbneftyherwe 18 января 2012 г. 13:07
    18 января 2012 г. 13:03
  • Т.е. лучше строку:

    DataContext db = new DataContext("Persist Security Info=False;User ID=" + login + ";Password=" + password + ";Initial Catalog=" + data + ";Data Source=\"" + server + "\"")
    
    

    заключить в блок using?


    MSDN AA User
    18 января 2012 г. 13:17
  • > Т.е. лучше строку: DataContext db = [...] заключить в блок using?


    да. цитата из msdn: "In general, a DataContext instance is designed to last for one "unit of work" however your application defines that term. A DataContext is lightweight and is not expensive to create."
     
     


    • Изменено Malobukv 18 января 2012 г. 13:48
    18 января 2012 г. 13:47