2011-05-19 49 views
2

首先,我不熟悉C#編程。 我已經創建了一個專用類,以根據下面的代碼從Visual Studio 2010中的Web Services應用程序的app.config中獲取連接字符串。ADO.NET連接字符串錯誤

打造的代碼,我通過catch塊出現以下錯誤:

「這個名字‘連接’不在當前情況下存在」。

很明顯,連接超出了範圍。

  1. 如何避免此錯誤?
  2. 在這裏正確使用Dispose方法嗎?

public class FCSConnection : IDisposable 
{ 
    public string GetDefaultConnectionString() 
    { 
     string DefaultConnectionString = null; 
     try 
     { 
      DefaultConnectionString = ConfigurationManager.AppSettings["ConnectionString"]; 
      SqlConnection connection = new SqlConnection(DefaultConnectionString); 
      connection.Open(); 
      return DefaultConnectionString; 
     } 
     catch (Exception) 
     { 
      if (DefaultConnectionString != null) 
      { 
       connection.Dispose(); 
      } 
     } 
     return DefaultConnectionString; 
    } 

    public void Dispose() 
    { 
     throw new NotImplementedException(); 
    }   
} 
+4

我很想試試這個,你應該知道'範圍'的含義。無論如何,'connection'的範圍只是'try'塊。 – Bobby 2011-05-19 10:31:29

+4

@Bobby,你讀過「對C#編程新手」嗎?瞭解範圍,尤其是使用try/catch塊,是每個人都經歷的事情。 – StuperUser 2011-05-19 10:36:23

+1

VS 2010的智能感知可以幫助你很多,初學者也可以避免使用它的錯誤。花一些時間學習。 – pramodtech 2011-05-19 10:40:08

回答

3
public class FCSConnection : IDisposable 
{ 
    private SqlConnection connection = null; 

    public string GetDefaultConnectionString() 
    { 
     string defaultConnectionString = null; 
     try 
     { 
      defaultConnectionString = ConfigurationManager.AppSettings["ConnectionString"]; 
      connection = new SqlConnection(defaultConnectionString); 
      connection.Open(); // are you sure want to keep the connection being opened?? 
     } 
     catch 
     { 
      Dispose(); 
     } 
     return defaultConnectionString; 
    } 

    public void Dispose() 
    { 
     if (connection != null) 
     { 
      connection.Dispose(); 
      connection = null; // to avoid repeat dispose 
     } 
    }   
} 
+1

這絕對會做的伎倆,但你只需要調用連接上的Dispose;如果它已經打開,那麼會關閉連接。如果有人在FCSConnection上多次調用Dispose的情況下將連接設置爲null,那麼也可以將連接設置爲null - 但這種情況並不重要。 – 2011-05-19 10:48:48

+1

+1您的評論'//你確定要保持連接被打開嗎?',連接不能被外部類訪問。也許將該方法重命名爲'GetDefaultConnection'並返回'connection'?會解決這個問題嗎? – StuperUser 2011-05-19 10:49:27

+0

所有優點,謝謝! – bombus1700 2011-05-19 10:55:26

4

確切的編譯器消息指你catch聲明:

connection.Dispose(); 

這裏,connection是一個未知的名字,因爲它的try塊內聲明的真實。

至於你的整個代碼,我認爲這也是錯誤的。如果您希望FCSConnection類封裝SQL連接,則應聲明connection作爲私有成員,然後將其置於您的Dispose()方法中。

+0

謝謝,這是有用的 – bombus1700 2011-05-19 10:46:26