是System.Data.SqlClient代码托管代码


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

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

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

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

  2. 一旦执行了.close命令,连接本身就会从.net应用程序中释放,并返回到连接池(OLEDB、ODBC和/或其他子系统的一部分(。此时,连接将被释放,非托管部分也将被释放。Dispose将执行close所做的一切,并释放其他托管部分(连接字符串等(。

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

关于第二个问题:

Close方法回滚任何挂起的事务。然后,它释放到连接池的连接,或者在禁用连接池的情况下关闭连接。

已编辑

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

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的对象使用。这包括SqlCommandSqlConnection。如果使用using语句,它们将在使用块后进行处理。

相关内容

  • 没有找到相关文章

最新更新