正确的重用SqlConnection页面的方法

时间:2011-09-03 21:08:37

标签: methods using sqlconnection

我会尽量简单地描述它。我们有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上创建并在方法中使用该打开的连接而无需打开新的。

由于

2 个答案:

答案 0 :(得分:2)

如果您关注性能,则会汇集Sql Connections;很有可能两种方法只使用一种连接,因此使用第二种方法的代价可以忽略不计。

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

答案 1 :(得分:1)

汇集了SqlConnections。使用Sql Server,你最好打开,使用和关闭(使用块做 - 最后使用调用close的Dispose扩展)。

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

让游泳池完成它的工作。