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