在 C# 程序中使用 System.Data.SqlClient 命名空间执行的查询是托管代码还是非托管代码?
每次连接关闭时,
(conn.Close()
都会使用方法)资源是否考虑释放或者我们必须释放它才能释放?
问问题
905 次
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。这包括SqlCommand
和SqlConnection
。如果你使用using
语句,它们将在使用块后处理。
于 2013-04-10T16:16:29.017 回答
1
System.Data.SqlClient 本身是托管代码。但是,它是建立在其他几个库之上的。其中一些是托管代码,而另一些则不是。
查询本身由数据库执行。因此,查询的文本(在程序中硬编码的部分)将被视为托管代码,但是一旦命令发送到数据库,它就不再是托管的。
执行 .close 命令后,连接本身将从您的 .net 应用程序中释放并返回到连接池(OLEDB、ODBC 和/或其他子系统的一部分)。此时,连接被释放,非托管部分被释放。Dispose 将完成所有关闭操作并释放其他托管部分(连接字符串等)。
在实现它的任何对象上调用 dispose 总是一个好主意(或将其包装在 using 块中,如 @IRSOG 所示)。在这种情况下,调用 close() 并不是特别危险。我不会养成这样的习惯。
于 2013-04-10T16:37:05.197 回答