1.文字说明
using定义一个范围,将在此范围之外释放一个或多个对象。
using语句允许程序员指定使用资源的对象应当何时释放资源。相当于应用using的对象在using的“}”前会执行Dispose()方法释放此对象的资源。
using常常用在数据访问层中。
使用using语句实际上生成的IL代码中是一个try, finally代码块,在finally代码块里释放资源。
using (SqlConnection conn = new SqlConnection())
{
conn.Open();
throw new Exception("Exception!!");
}
疑问:上面using语句中抛出异常之后能回收SqlConnection对象的资源吗?
答案:能,即使在using中出现异常,using仍然能够回收SqlConnection对象的资源
2.举例说明
/// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <returns>影响的记录数</returns>
public static int ExecuteSql(string SQLString)
{
using (SqlConnection connection = new SqlConnection(connectionString)) //using作用于SqlConnection 对象
{
using (SqlCommand cmd = new SqlCommand(SQLString, connection)) //using作用于SqlCommand 对象
{
try
{
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (System.Data.SqlClient.SqlException E)
{
connection.Close(); //注意:不管是using还是Dispose(),都不能代替Close()方法,一定要写上Close()方法
throw new Exception(E.Message);
}
}
}
}