-
在C#程序中执行的查询是使用System.Data.SqlClient命名空间的托管代码还是人工代码?
-
每次连接关闭时,都会使用
(conn.Close()
方法(资源是否被释放,或者我们必须处理它才能被释放?
System.Data.SqlClient本身就是托管代码。然而,它是建立在其他几个库之上的。其中有些是托管代码,有些不是。
-
查询本身由数据库执行。因此,查询的文本(程序中硬编码的部分(将被视为托管代码,但一旦命令被发送到数据库,它就不再被管理。
-
一旦执行了.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的对象使用。这包括SqlCommand
和SqlConnection
。如果使用using
语句,它们将在使用块后进行处理。