Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确保连接已关闭_C#_Sqlconnection - Fatal编程技术网

C# 确保连接已关闭

C# 确保连接已关闭,c#,sqlconnection,C#,Sqlconnection,我想问一下,使用数据库连接并关闭它们的常见方式是什么 这是我的程序,但我在一个exeption中看到,connection.Close()将不会执行 我应该在整个街区使用试捕器吗?因为某些原因,我看到大多数人都不这样做 using (SqlConnection connection = new SqlConnection(ConnectionString)) { using (SqlCommand command = new SqlCommand())

我想问一下,使用数据库连接并关闭它们的常见方式是什么

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

我应该在整个街区使用试捕器吗?因为某些原因,我看到大多数人都不这样做

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;
            }
        }
我应该在整个街区使用试捕器吗?因为某种原因 我看大多数人都不喜欢

不可以。因为您使用的是语句,它将转换为
try finally
块,所以即使发生异常,它也将确保对象的处理

using语句确保在 调用对象上的方法时发生异常<斯特朗>你 通过将对象放入try块中,可以获得相同的结果 然后在finally块中调用Dispose;事实上,这就是 using语句由编译器翻译。

确保连接已关闭

要确保连接始终处于关闭状态,请打开连接 使用块。。。。。。。这样做可以确保连接 当代码退出块时自动关闭


您不必显式地这样做,因为
SqlConnection
实例将始终被释放(然后,连接关闭),这要感谢
使用
语法糖。

您使用
使用
块打开连接,这意味着编译器将确保
Dispose()
在连接上被调用,该连接将调用
Close()
。因此,不用担心,您不需要自己关闭连接()
,即使在出现
异常的情况下,您也会看到什么异常?这似乎回答了您的问题-。使用“使用”时不需要关闭连接/读卡器会自动关闭。net默认情况下使用连接池,因此,如果您处置连接,则不会关闭该连接。该连接会放入池中以供重用(在大多数情况下,这会提高性能)。在using块中,对象是只读的,无法修改或重新分配。因此,当您关闭()时,可能会被认为是对对象的修改,因为关闭()在using块的关闭}之后是隐式的,因此会出现错误。为了澄清@Petoj所说的,当您调用
close()
时,连接没有关闭,它只是返回到池的连接,直到超时,然后真正关闭。(除非您在创建连接时告诉它不要在连接字符串中使用连接池)