使用System.Data.SqlClient命名空间cosnidered managed or umanaged code在C#progamm中执行查询吗?是System.Data.SqlClient代码的托管代码?
每次关闭连接时,都会使用
(conn.Close()
方法)资源是否会考虑释放,或者我们必须将其释放才能释放?
2
A
回答
1
System.Data.SqlClient本身是托管代码。但是,它建立在其他几个图书馆之上。其中一些是托管代码,另一些则不是。
查询本身由数据库执行。因此,查询文本(在您的程序中硬编码的部分)将被视为托管代码,但是一旦该命令被发送到数据库,它就不再被管理。
执行.close命令后,连接本身将从.NET应用程序释放并返回到连接池(OLEDB,ODBC和/或其他子系统的一部分)。此时,连接被释放,非托管部分被释放。 Dispose将完成所有关闭并释放其他托管部分(连接字符串等)。
在任何实现它的对象上调用dispose总是一个好主意(或者将它包装在使用块中,如@IRSOG所示)。在这种情况下,调用close()并不是特别危险。我不会养成它的习惯。
1
关于第二个问题:
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。这包括SqlCommand
和SqlConnection
。如果使用using
语句,它们将在使用块后处理。
相关问题
- 1. 托管代码与非托管代码
- 2. 什么是托管代码和非托管代码?
- 3. 是AutoIt“托管代码”?
- 4. 托管代码和非托管代码之间的调用代码
- 5. C++托管代码
- 6. 托管Java代码
- 7. 使用托管代码中的非托管代码
- 8. .NET中的托管代码和非托管代码
- 9. 更改托管代码中非托管代码的内存值
- 10. 从托管代码调用非托管代码的性能
- 11. 托管源代码管理?
- 12. 将非托管C++代码编译为托管代码
- 13. 通多 - 从托管代码维数组非托管代码
- 14. 如何使用托管代码从非托管代码?
- 15. 在调试托管代码时调试非托管代码
- 16. 从非托管代码调用托管代码
- 17. C++/cli将托管代码传递给非托管代码
- 18. 调试托管代码和非托管代码
- 19. 托管的system.timer over un托管代码
- 20. 托管代码的优势
- 21. WinPE中的托管代码
- 22. 托管代码是指JIT还是GC?
- 23. 托管代码在非托管
- 24. MFC托管代码引用
- 25. 在非托管C++代码
- 26. 与来自托管代码
- 27. 从非托管代码
- 28. char *在托管代码中?
- 29. 托管源代码库
- 30. 非托管dll代码
查询在SQL Server或任何其他数据库系统上执行 - 这些系统通常不是托管代码库... – 2013-04-10 16:13:25
您是出于好奇还是因为您有特定的问题需要您此信息为?如果确实有问题,最好直接描述一下。 – Pondlife 2013-04-10 16:28:29
@Pondlife我在C#中有一个项目,我打开了数倍于sql的conn's。我想知道,如果每次关闭conn,资源都会重新启用,或者我必须使用Dispose方法。此外,我要求Q1在每次查询后需要实现我自己的dispose方法来释放资源。 – apomene 2013-04-10 16:32:49