确保连接已关闭

时间:2013-12-10 14:33:28

标签: c# sqlconnection

我想问一下使用数据库连接和关闭它们的常用方法是什么。

这是我的程序,但我在一个例子中看到,connection.Close()将不会执行。

我应该在整个街区使用try-catch吗?因为某种原因,我看到大多数人都没有。

using (SqlConnection connection = new SqlConnection(ConnectionString))
        {
            using (SqlCommand command = new SqlCommand())
            {
                command.CommandText = "procedure";

                command.Connection = connection;

                command.CommandType = CommandType.StoredProcedure;

                tmpParameter = DBUtils.createInSQLParam("@ImageID", SqlDbType.SmallInt, htmlImageId);
                command.Parameters.Add(tmpParameter);

                command.Connection.Open();

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    htmlImageDetails = GetHtmlImageDetailsFromReader(reader, true, out newId);

                    reader.Close();
                }

                connection.Close();

                return htmlImageDetails;
            }
        }

3 个答案:

答案 0 :(得分:5)

您不必明确地执行此操作,因为SqlConnection实例将始终处置(然后,连接已关闭),这要归功于using句法糖。

答案 1 :(得分:2)

  

我应该在整个街区使用try-catch吗?因为某种原因   我看到大多数人都没有。

没有。由于您使用的是using语句,因此转换为try-finally块,因此即使发生异常,也会确保对象的处理。

using Statement (C# Reference)

  

using语句确保调用Dispose,即使是也是如此   在对象上调用方法时发生异常您   通过将对象放在try块中可以实现相同的结果   然后在finally块中调用Dispose;其实这是怎么回事   using语句由编译器翻译。

SqlConnection.Dispose确保关闭连接。

  

要确保始终关闭连接,请打开连接   在using块内,.......这样做可以确保连接   当代码退出块时自动关闭。

答案 2 :(得分:2)

您正在打开与using块的连接,这意味着编译器将确保在连接上调用Dispose(),这将调用Close()。所以不用担心,即使是Close(),您也不需要自己Exception建立连接。