帮我分析一下这个using的用法?

来源:百度知道 编辑:UC知道 时间:2024/06/03 07:12:47
请看下面的类:是一个静态类,数据库连接也是静态的。
namespace DAL
{
public static class SqlHelper
{
static string _ConStr = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=SQLTest;Integrated Security=True";
static SqlConnection _SqlCon = new SqlConnection(_ConStr);

/// <summary>
/// 执行SQL语句返回受影响的行数
/// </summary>
/// <param name="SqlString">SQL语句</param>
/// <returns>受影响的行数</returns>
public static int Execute(string SqlString)
{
using (_SqlCon)
{
using (SqlCommand SqlCom = new SqlCommand(SqlString, _SqlCon))
{
try
{
_SqlCon.Open();
return SqlCom.ExecuteNonQuery();
}
catch (SqlException e)
{
_SqlCon.Close();
throw e;
}
}
}
}
}
}
我的问题是:
1.在Execute方法里面,使用了using (_SqlCon){}语句,那么在方法开始的时候会对_S

1、using语句只能对实现了IDisposeable接口的对象使用,
作用是在using代码块中的代码执行完成后自动执行对象的dispose方法
它的优点是不管执行过程中是否抛出异常,都能安全的将对象释放掉。
2、这个不太清楚SqlConnection的dispose方法中有没有进行close()操作,
你可以自己测试一下,判断ConnectionState。
3、中途调用dispose()方法,可能会出现意料之外的情况,但是程序编译的时候不会出现错误,只有在运行时才会出现。你可以反编译一下sqlConnection看一下再dispose方法中都释放了哪些资源。

用了using{}以后会自动回收对象,收回被占用资源,你可以不用再自己写代码释放资源了,所以_SqlCon.close()就不用写了。你可以去msdn上看看using关键词的用法,除了表示命名空间外,还有其它的用法。