首页
学习
活动
专区
圈层
工具
发布

连接池
EN

Stack Overflow用户
提问于 2010-04-27 02:04:25
回答 4查看 1.1K关注 0票数 4

我有以下代码,如果我在最后使用conn == null,我还会使用连接池吗?我知道关闭连接是一种很好的做法,但是如何处理整个连接对象呢?

代码语言:javascript
复制
    public void ExecuteNonQuery(SqlCommand Cmd)
    {
        //========== Connection ==========//
        SqlConnection Conn = new SqlConnection(strConStr);

        try
        {
            //========== Open Connection ==========//
            Conn.Open();

            //========== Execute Command ==========//
            Cmd.Connection = Conn;
            Cmd.CommandTimeout = 180;
            Cmd.ExecuteNonQuery();
        }
        catch (Exception Exc)
        {
            throw Exc;
        }
        finally
        {
            //======== Closing Connection ========//
            if (Conn.State == ConnectionState.Open)
            { Conn.Close(); }

            //======== Disposing object ========//
            Conn = null;
        }
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-27 02:08:56

首先,考虑使用using,其次,让框架来处理处理。managed providers将根据连接字符串进行池化。

代码语言:javascript
复制
public void ExecuteNonQuery(SqlCommand Cmd) 
{ 
    //========== Connection ==========// 
    using(SqlConnection Conn = new SqlConnection(strConStr))
    { 
        //========== Open Connection ==========// 
        Conn.Open(); 

        //========== Execute Command ==========// 
        Cmd.Connection = Conn; 
        Cmd.CommandTimeout = 180; 
        Cmd.ExecuteNonQuery(); 
    } 
} 
票数 6
EN

Stack Overflow用户

发布于 2010-04-27 02:09:40

Garbage Collection.

  • It中,你不需要将任何东西设置为
  • 或nothing,这是由.NET自动处理的,无论是在你的错误处理中,还是在一切按计划进行时,你都必须调用Conn.Dispose()。Try Catch Finally代码块对此非常有用。另一种选择是在声明连接时使用关键字,这样无论发生什么情况,connection对象都会被正确地处理。
  • 不用担心连接池的问题。如果您每次需要使用时都打开一个新的,这是很好的。ADO.NET在幕后为您共享连接。如果您重用相同的打开的连接对象,则会有较小的性能,但为了简单起见,请不要担心。

您可以使用以下代码执行相同的操作。结果也是一样的。无论错误是否关闭,Conn都将得到正确处理。任何错误都会向上渗透,就像以前一样。

代码语言:javascript
复制
public void ExecuteNonQuery(SqlCommand Cmd)
{
    Using (SqlConnection Conn = new SqlConnection(strConStr));
    {
        //========== Open Connection ==========//
        Conn.Open();

        //========== Execute Command ==========//
        Cmd.Connection = Conn;
        Cmd.CommandTimeout = 180;
        Cmd.ExecuteNonQuery();
    }
}

正如您所看到的,当您想要/需要的唯一错误处理是确保正确地处理您的连接对象时,Using语法可以使事情变得整洁。

票数 4
EN

Stack Overflow用户

发布于 2010-04-27 02:08:36

将其设置为null是多余的,因为它无论如何都会在函数结束时超出作用域。是的,如果您这样做了,您仍然在使用连接池。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2715714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档