2011-07-24 4 views
0

を閉じていない - 私はDataReaderを充填.csファイルのページから呼び出す:渡すのDataReader - 私はクラスに次のメソッドを使用しCommandBehavior.CloseConnectionを使用しますが、接続

public static SqlDataReader getinfo(string username, string url) 
{ 
    //Initialise connection, string stored in Web.config 
    SqlConnection conNs = new SqlConnection(ConfigurationManager.ConnectionStrings["conNs"].ConnectionString); 
    SqlCommand cmdNs = new SqlCommand("usp_getinfo", conNs); 
    cmdNs.CommandType = CommandType.StoredProcedure; 

    cmdNs.Parameters.Add(new SqlParameter("@username", SqlDbType.VarChar, 50)); 
    cmdNs.Parameters["@username"].Value = username; 
    cmdNs.Parameters.Add(new SqlParameter("@url", SqlDbType.VarChar, 50)); 
    cmdNs.Parameters["@url"].Value = url; 

    //Execute Command 
    conNs.Open(); 
    SqlDataReader dr = cmdNs.ExecuteReader(CommandBehavior.CloseConnection); 

    //Return data 
    return dr; 
} 

お知らせ「commendbehavior .closeconnection '。私はこのようにそれを呼び出すことは.csページで次に

:あまりにもなしの接続を閉じる必要があります

SqlDataReader drInfo = dataAccess.getinfo(username, url); 
//do some stuff 
drInfo.Close(); 

開いている接続でいっぱいになっているアプリケーションプールに問題があります。私のテクニックに問題はありますか?

スピードが優先されます。

おかげ

+0

私はデータリーダーへの参照を渡すことをお勧めしません...私の意見では、データベースにクエリを行い、その結果を単一の結果オブジェクト(または結果オブジェクトのコレクション)に変換することをお勧めします。そのデータリーダー。例えばデータリーダの値をオブジェクトに読み込み、それらのオブジェクトを返す(データリーダ参照を渡す代わりに) –

+0

あなたの入力に感謝します。私のコードで接続が閉じない理由は何ですか? –

+0

スピード&シンプル。 –

答えて

0

は、私はあなたの代わりに、SqlDataReaderののデータテーブルを返す必要があるとあなたはデータリーダーから読み終えた直後に接続を終了する必要があると思います。

+0

これは最も速いオプションなので、私はdatareaderを使いたいですか? 私のCommandBehavior.CloseConnectionはここで接続を閉じるべきではありませんか?何らかの理由で表示されません。 thx –

0

あなたは、接続が接続プールで開いたままにされていないことを確認しています...あなたは、接続はgetinfo()メソッドをクローズする必要があると思うこのquestion.Iを見てみましょうまたはカウントは常に増加していますか?

+0

が渡され、100までカウントが増加します。その時点でタイムアウト例外が発生します。 明らかにdr.close()が接続を閉じていないようです –

+0

おそらく、接続に保持しているコマンド(明示的に解放していません)、 'cmdNs'をブロックを使用して? using(SqlCommand cmdNs =新しいSqlCommand( "usp_getinfo"、conNs)) { // return dr here } –

0

GetInfoは多くのデータを返すようには見えません。あなたはこのようにDataReaderを渡さない方が良いです。 GetInfo内で、DataReaderを返す代わりに、情報を含むオブジェクトを読み取り、返します。速度の違いは重要ではなく、あなたはあなたが通過しているすべての痛みを排除します。

関連する問題