2013-10-16 49 views
0

我有,看起來像下面這樣的方法存在問題:防止SQLdatareader返回NULL怎麼辦?

public SqlDataReader statistiekenDocentBekijken(int docentid) 
    { 
     //Conectie met de database 
     SqlConnection connectie = new SqlConnection("user id=bbbbb;" + 
      "password=bbbbb;server=bbbbb;" + 
      "Trusted_Connection=false;" + 
      "database=bbbbb; "); 

     SqlCommand statsDocenten = new SqlCommand("SELECT * FROM ENQUETE_ANTWOORD LEFT JOIN KDV ON ENQUETE_ANTWOORD.kdv_ID = KDV.kdv_ID LEFT JOIN DOCENT ON KDV.docent_ID = DOCENT.docent_ID LEFT JOIN VAK ON KDV.vak_ID = VAK.vak_ID WHERE DOCENT.docent_ID = "+ docentid +" ",connectie); 
     SqlDataReader statsDocentenR; 
     connectie.Open(); 
     statsDocentenR = statsDocenten.ExecuteReader(); 
     connectie.Close(); 
     return statsDocentenR; 
    } 

該方法位於類中的方法,我把所有的方法

我想是返回內容在datareader中,並將其顯示在一個名爲Mainform的窗體上的datagridview中。我的方法當前返回null,因爲我在返回任何東西之前關閉連接。我現在不知道該怎麼做,因爲我無法關閉Mainform中的連接,而我甚至不知道這是否是正確的方式,或者我可能應該以其他方式返回。我希望你們中的任何人都可以幫我解決這個問題。謝謝。

回答

0

如果我已經正確地閱讀了問題。

添加CommandBehavior.CloseConnection

更改執行讀取

statsDocentenR = statsDocenten.ExecuteReader(CommandBehavior.CloseConnection);

刪除connectie.Close();

當閱讀器關閉的連接將關閉。

+0

當數值已被返回且方法不再使用時,閱讀器是否自行關閉? –

+0

好了,謝謝! –

+0

@NiekJonkman GC將處理閱讀器,連接將關閉。然而,當我讀完'statsDocentenR.Close()'後,我會調用close方法。如果你不知道連接將保持打開狀態,你永遠不會知道連接會持續多久。 – Fred