使用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. 託管Java代碼
- 5. C++託管代碼
- 6. 託管代碼和非託管代碼之間的調用代碼
- 7. .NET中的託管代碼和非託管代碼
- 8. 更改託管代碼中非託管代碼的內存值
- 9. 使用託管代碼中的非託管代碼
- 10. 從託管代碼調用非託管代碼的性能
- 11. 允許託管環境中的託管代碼回撥非託管代碼
- 12. 託管源代碼管理?
- 13. 自託管代碼管理
- 14. 如何使用託管代碼從非託管代碼?
- 15. 從非託管代碼獲取值到託管代碼
- 16. 在調試託管代碼時調試非託管代碼
- 17. 調試託管代碼和非託管代碼
- 18. 通多 - 從託管代碼維數組非託管代碼
- 19. C++ cli從非託管代碼調用託管代碼
- 20. 將非託管C++代碼編譯爲託管代碼
- 21. 從託管代碼調用非託管代碼
- 22. C++/cli將託管代碼傳遞給非託管代碼
- 23. 從非託管代碼調用託管代碼
- 24. 託管的system.timer over un託管代碼
- 25. 託管代碼的優勢
- 26. WinPE中的託管代碼
- 27. 託管代碼是指JIT還是GC?
- 28. 託管代碼在非託管
- 29. 從託管代碼託管CLR?
- 30. 託管代碼的術語是什麼?
查詢在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