2016-04-05 4 views
0

DataReaderを使用して異なるAJAX呼び出しのデータを取得します。DataReaderを使用して複数のAJAX呼び出しのためのデータを取得中、

方法1:

using (SqlDataReader reader = clientDb.ExecuteSPReader("SP1", 
             CommandBehavior.CloseConnection, 
             parameters)) 
{ 
    if (reader.HasRows) 
    { 
     while (reader.Read()) 
     { 
     } 
     reader.Close(); 
    } 
} 

方法2:

using (SqlDataReader reader = clientDb.ExecuteSPReader("SP2", 
             CommandBehavior.CloseConnection, 
             parameters)) 
{ 
    if (reader.HasRows) 
    { 
     while (reader.Read()) 
     { 
     } 
     reader.Close(); 
    } 
} 

方法の両方が、単一のデータベース上で実行されます。それはGCによって閉鎖されるので、私は読者を閉じないことを示唆すべきか?私は "using"ステートメントで読者を実行しています。

私の場合、問題は両方のメソッドが同じデータベースを使用しているためです。 1つの方法

reader.close() 

は、他のメソッド接続を閉じ、例外にジャンプします。そのようなAJAXリクエストメソッドを実装する最良の方法は何かを知りたがっています。

私はまた、管理対象オブジェクトを閉じたり破棄したりしてはならないというURLを次のように読んでいます。

https://msdn.microsoft.com/en-us/library/8xx3tyca%28v=vs.110%29.aspx

答えて

0

まず、実行はスコープを残しusingステートメントを使用することによって、SqlDataReaderのは、配置されます。手動でreader.Dispose()を呼び出すのと同じです。

SqlConnectionのように、読者は外部コードまたは管理されていないコードに依存しないため、コードを廃棄する必要はありませんが、常にclose itにする必要があります。処分はGCによって管理されます。

さらにSqlConnectionusing statementに貼り付ける必要があります。これは、データベースへの接続プールを使用しているためです。また、使用していないときにデータベースに多くのオープンな接続を残すと、パフォーマンスはあまり良くありません。

これらのデータベース呼び出しは、同じメソッドでお互いに連続して実行されるのではなく、2つの異なる呼び出しで行われると仮定します。

関連する問題