2016-08-19 3 views
2

私はこれを書いた。これは、開いているSQL接続を処分する良い方法ですか?私の先輩は、これがベストプラクティスだと言いましたが、依然として私はここで質問して自分のことを確かにしたいと思っています。これはSQL接続を処分する良い方法ですか?

public bool SaveBulkpayment(List<ClsCombinePayment> list) 
{ 
    bool Result = false; 
    ClsDatabaseManager Manager = ClsDatabaseManager.InitializeDbManager(Constants.Databases.POSSystem); 
    Manager.Open(); 
    Manager.CreateParameters(10); 
    try 
    { 
     foreach (var item in list) 
     { 
      Manager.AddParameters(0, "@Batch", item.Batch); 
      Manager.AddParameters(1, "@TransactionDateTime", TransactionDateTime); 
      Manager.AddParameters(2, "@BatchNo", BatchNo); 
      Manager.AddParameters(3, "@Salary", item.Salary); 
      Manager.AddParameters(4, "@EDRRecord_ID", item.EDRRecord_ID); 
      Manager.AddParameters(5, "@User_ID", item.User_ID); 
      Manager.AddParameters(6, "@Branch_ID", item.Branch_ID); 
      Manager.AddParameters(7, "@PafFile_ID", item.PAFFile_ID); 

      Manager.AddParameters(8, "@PinCode", item.PinCode); 
      Manager.AddParameters(9, "@ifDiff", item.ifDiff); 
      Result = Manager.ExecuteNonQuery("usp_SaveBulkPayment").ToBool(); 
     } 
     Manager.Dispose(); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    return Result; 
} 

答えて

4

ない安全に配置されます。これを行うにはusingを使用してください。以下のような

何か:

のみ IDisposableを実装するオブジェクトに使用することができます
using(var manager = ClsDatabaseManager.InitializeDbManager(Constants.Databases.POSSystem); Manager.Open()) 
{ 
    //Your code 
} 

usingは例外またはブロックで戻りがあってもDispose()メソッドが呼び出されることを確認してください。

public void Using<T>(T input, Action<T> predicate) where T : IDisposable 
{ 
    try 
    { 
     predicate(input); 
    } 
    finally 
    { 
     input.Dispose(); 
    } 
} 
+0

を学ぶためにはOKですので、私は最終的にブロックすることができますか? – Cuckoo

+1

@Cuckoo - そうだけど、より良い方法は、 –

+0

okを使ってReader.close()を使うことです。それは残しておくか、それを最終的に動かすべきでしょうか? – Cuckoo

1

オープンSQL接続は、できるだけ早期に処理する必要があります。

あなたのコードでは、SQL接続をfinallyブロックに配置することになります。このようにしても、例外の場合には、接続は、それが配置されることはありません例外の場合には...本当に

try 
{ 
    //Code   
} 
catch (Exception ex) 
{ 
    //Handle exception 
} 
finally{ 
    //Dispose the Connection 
    Manager.Dispose(); 
} 
+0

True:これは、 'using'キーワードが確認するものです。 –

+0

@GiladGreen Ah ok。私は今までの使用の基本的な実装を知りませんでした。ありがとうございました。 – DVJex

+0

それはまさに私たちがすべてあなたの上にいる理由です。 –

関連する問題