这是配置sql连接的好方法吗?

时间:2016-08-19 05:28:24

标签: c# asp.net c#-4.0 ado.net

我刚写了这个。这是处理开放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;
}

2 个答案:

答案 0 :(得分:4)

不是真的..在例外的情况下,它不会被处置。使用using即可。

类似的东西:

using(var manager = ClsDatabaseManager.InitializeDbManager(Constants.Databases.POSSystem); Manager.Open())
{
    //Your code
}

只能在实现using的对象上使用的IDisposable确保即使块中存在异常或返回,也会调用Dispose()方法。它的实现类似于:

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

答案 1 :(得分:1)

应尽早处理开放的SQL连接。

在您的代码中,更好的方法是将SQL连接置于finally块中。这种方式即使在例外的情况下,连接也将安全地处理

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