2013-10-16 46 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