2014-01-20 69 views
0

我有一個實現Rest服務的ASP.NET(.NET 4.0)應用程序。我在這個應用程序中連接到Oracle。我的代碼可以正常工作。請注意它在構造函數中。ASP.NET中的Oracle連接

OracleConnection m_cnn = new OracleConnection("Data Source=MySid;User Id=user1;Password=password1"); 
m_cnn.Open(); 
//m_connected = ConnectCDB(); 

現在我改變我的代碼如下,我得到一個空指針異常

OracleConnection m_cnn = new OracleConnection("Data Source=MySid;User Id=user1;Password=password1"); 
//m_cnn.Open(); 
m_connected = ConnectCDB(); 

的ConnectCDB功能

private bool ConnectCDB() 
{ 
    // Open the database connection 
    m_cnn.Open(); 

    return true; 
} 

的m_cnn和m_connected是類的私有成員。如果我調用一個單獨的函數,爲什麼它會出錯?

回答

2

此代碼:

OracleConnection m_cnn = new OracleConnection("..."); 

...聲明構造函數中的一個局部變量。它不會爲實例變量賦值。要做到這一點,你應該使用:

m_cnn = new OracleConnection("..."); 

話雖如此,我會警惕這種模式的呢 - 這通常是更好地創建,打開,使用和再密切的聯繫,當你需要他們。它使得清理工作更加簡單,不需要在整個地方實施IDisposable。依靠底層連接池來提高效率。

+0

ops ...非常愚蠢的錯誤在我身邊。感謝您指出這一點。 – user2837961

+0

你的意思是我應該打開,使用和關閉一個Oracle連接,每次用戶調用服務(可能每隔1-2秒),而不是保持連接打開? – user2837961

+0

@ user2837961:絕對是。連接池將保持高效,並且您不必擔心無意中同時使用同一連接兩次。 –