【问题标题】:Proper way of reusing SqlConnection for page为页面重用 SqlConnection 的正确方法
【发布时间】:2011-11-09 21:17:42
【问题描述】:

我会尽量简单地描述它。我们有SqlConnection 和 3 个方法。

第一种

这种类型打开一个 SqlConnection 和方法的有属性SqlConnection。基本上他们只使用 sConnection 并在方法内创建、使用、关闭 SqlCommand 和 SqlDataReader

using (SqlConnection sConnection = new SqlConnection(string))
{
    sConnection.Open();

    Method objMethod = new Method();
    objMethod.SqlConnection = sConnection;
    objMethod.DoSomething();

    Method2 objMethod = new Method2();
    objMethod2.SqlConnection = sConnection;
    objMethod2.DoSomething();

    Method3 objMethod = new Method3();
    objMethod3.SqlConnection = sConnection;
    objMethod3.DoSomething();
}

第二类

此类型将在每个方法中分别创建新的 SqlConnection、SqlCommand、SqlDataReader。对于 3 种方法,它必须打开和关闭 3 个 SqlConnections。

    Method objMethod = new Method();
    objMethod.DoSomething();

    Method2 objMethod = new Method2();
    objMethod2.DoSomething();

    Method3 objMethod = new Method3();
    objMethod3.DoSomething();

问题是是否将 SqlConnection 封装在方法中,还是在 SqlConnection 上创建并在方法中使用打开的连接而不需要打开新的连接是否安全。

谢谢

【问题讨论】:

    标签: methods using sqlconnection


    【解决方案1】:

    Sql 连接是池化的,所以如果您关心性能;两种方法都可能只使用一个连接,因此使用第二种方法的损失可以忽略不计。

    另一方面,第二种方法显示了更好的封装和关注点分离。我会选择第二个选项。

    【讨论】:

      【解决方案2】:

      SqlConnections 是池化的。使用 Sql Server,您最好打开、使用和关闭(using 块会这样做 - 最终使用调用 close 的 Dispose 扩展)。

      事实上,保持连接打开并保持连接实际上会损害性能,因为您正在破坏池行为并导致其他线程/请求在不需要时将另一个连接添加到池中。

      让泳池发挥作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-13
        • 1970-01-01
        • 2014-10-05
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        • 2020-01-15
        相关资源
        最近更新 更多