2
  1. 在 C# 程序中使用 System.Data.SqlClient 命名空间执行的查询是托管代码还是非托管代码?

  2. 每次连接关闭时,(conn.Close()都会使用方法)资源是否考虑释放或者我们必须释放它才能释放?

4

2 回答 2

1

关于第二个问题:

Close 方法回滚任何挂起的事务。然后它释放到连接池的连接,或者如果连接池被禁用,则关闭连接。

已编辑

下面的示例创建一个 SqlConnection,打开它,显示它的一些属性。连接在 using 块结束时自动关闭。

private static void OpenSqlConnection(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        Console.WriteLine("ServerVersion: {0}", connection.ServerVersion);
        Console.WriteLine("State: {0}", connection.State);
    }
}

已编辑

您创建的每个实现 IDisposable 的对象都需要一个 using。这包括SqlCommandSqlConnection。如果你使用using语句,它们将在使用块后处理。

于 2013-04-10T16:16:29.017 回答
1

System.Data.SqlClient 本身是托管代码。但是,它是建立在其他几个库之上的。其中一些是托管代码,而另一些则不是。

  1. 查询本身由数据库执行。因此,查询的文本(在程序中硬编码的部分)将被视为托管代码,但是一旦命令发送到数据库,它就不再是托管的。

  2. 执行 .close 命令后,连接本身将从您的 .net 应用程序中释放并返回到连接池(OLEDB、ODBC 和/或其他子系统的一部分)。此时,连接被释放,非托管部分被释放。Dispose 将完成所有关闭操作并释放其他托管部分(连接字符串等)。

在实现它的任何对象上调用 dispose 总是一个好主意(或将其包装在 using 块中,如 @IRSOG 所示)。在这种情况下,调用 close() 并不是特别危险。我不会养成这样的习惯。

于 2013-04-10T16:37:05.197 回答