2017-11-06 17 views
-2

私はC#linqをSQLアプリケーションに使用しており、アプリケーションは24 * 7のサーバーで動作しています。今私は問題のデータベース接続に直面しているので、アクティブな接続が200以上に達するようにクローズしていません。私はどこでもデータベースを直接扱っています。データベース接続が正しく終了していません

しかし、これは私の問題を解決するものではありません。確認し、私がこれのためにできることを教えてください。

プロバイダは常に自分のデータベースを無効にします。

using (DataClassesDataContext DbContext = new DataClassesDataContext()) 
{ 
    return DbContext.tblApiLinks.FirstOrDefault(U => U.ProviderName == ProviderName); 
} 


using (DataClassesDataContext DbContext = new DataClassesDataContext()) 
     { 
      tblApiLink Apilink = new tblApiLink(); 
      Apilink.ApiUrl = Url; 
      Apilink.ApiKey = Key; 
      Apilink.ProviderName = Provider; 

      DbContext.tblApiLinks.InsertOnSubmit(Apilink); 
      DbContext.SubmitChanges(); 
     } 

新編集

ケース1は、テーブルを返すこれらのコードを確認してください。これは接続を閉じるために効果がありますか?

public tblApiLink getData() 
{ 
    using (DataClassesDataContext DbContext = new DataClassesDataContext()) 
{ 
    return DbContext.tblApiLinks.FirstOrDefault(U => U.ProviderName == ProviderName); 
} 
} 

tblApiLink api = getData(); 

ケース2.私がこのように使用した場合、tblApiLinks lst = dbContext.tblApiLinks; これは接続を閉じることはないと思うし、それらは常にアクティブになります。

ケース3.長期間アクティブで、使用されていないすべてのスリープ接続を閉じる方法はありますか?

+0

DBのクエリ方法のサンプルコードを追加してください。 –

+0

'"確認して教えてください... "' - 何を*正確にチェックしますか? – David

+0

@PankajMishra:表示されているコードに構造的に間違っているものはありません。あなたが観察している問題は、このコードで提示されているものほど単純ではないかもしれません。 – David

答えて

0

「ケース1」では、返すものを格納する変数を設定し、使用ブロックが閉じられた後に値を返します。

例:

tblApiLink returnData = null; 
    using(DataClassesDataContext DbContext = new DataClassesDataContext()) 
    { 
     returnData = DbContext.tblApiLinks.FirstOrDefault(U => U.ProviderName == ProviderName); 
    } 
    return returnData; 

サイドノート:タイプtblApiLinkが正しく規則に従って命名されていない、私は、可能な場合は、それをリファクタリング示唆しています。

ケース2:あなたが何を意味するのか分かりません。

ケース3:接続を処理して閉じるシングルトンを使用できますが、これを行う正しい方法は、もはやアクティブではない接続を破棄することです。アクティブな接続を本当に停止させたい場合は、手動で行うか、後で呼び出すことができるプロシージャを保存するかのいずれかを選択することをお勧めします。

関連する問題