首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当抛出异常时,确保SQL连接关闭的正确方法是什么?

当抛出异常时,确保SQL连接关闭的正确方法是什么?
EN

Stack Overflow用户
提问于 2008-09-26 18:43:56
回答 7查看 16.8K关注 0票数 18

我经常使用类似这样的模式。我想知道这是不是可以,或者是否有我没有在这里应用的最佳实践。

具体地说,我想知道,在抛出异常的情况下,我在finally块中拥有的代码是否足以确保适当地关闭连接?

代码语言:javascript
复制
public class SomeDataClass : IDisposable
{
    private SqlConnection _conn;

    //constructors and methods

    private DoSomethingWithTheSqlConnection()
    {
        //some code excluded for brevity

        try
        {
            using (SqlCommand cmd = new SqlCommand(SqlQuery.CountSomething, _SqlConnection))
            {
                _SqlConnection.Open();
                countOfSomething = Convert.ToInt32(cmd.ExecuteScalar());
            }
        }
        finally
        {
            //is this the best way?
            if (_SqlConnection.State == ConnectionState.Closed)
                _SqlConnection.Close();
        }

        //some code excluded for brevity
    }

    public Dispose()
    {
        _conn.Dispose();
    }
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-09-26 18:46:38

将您的数据库处理代码包装在"using“

代码语言:javascript
复制
using (SqlConnection conn = new SqlConnection (...))
{
    // Whatever happens in here, the connection is 
    // disposed of (closed) at the end.
}
票数 45
EN

Stack Overflow用户

发布于 2008-09-26 18:55:01

.Net框架管理一个连接池是有原因的。相信它!:)您不需要编写这么多代码就可以连接到数据库并释放连接。

您可以只使用'using‘语句,并确保'IDBConnection.Release()’将为您关闭连接。

高度复杂的“解决方案”往往会导致错误代码。简单就是更好。

票数 8
EN

Stack Overflow用户

发布于 2008-09-26 18:49:53

我猜你说的_SqlConnection.State == ConnectionState.Closed指的是!=

这肯定会奏效的。我认为更习惯的做法是将connection对象本身包含在using语句中,但是如果您出于某种原因想要重用相同的connection对象,那么这样做是很好的。

不过,有一件事是绝对应该更改的,那就是Dispose()方法。不应在dispose中引用connection对象,因为该对象可能已在那时完成。相反,您应该遵循推荐的Dispose模式。

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

https://stackoverflow.com/questions/141204

复制
相关文章

相似问题

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