using (SqlConnection conn = new SqlConnection(DbUtil.ConnString)解释:
在 using 语句中创建一个实例,确保退出 using 语句时在对象上调用 Dispose。当到达 using 语句的末尾,或者如果在语句结束之前引发异常并且控制离开语句块,都可以退出 using 语句。
实例化的对象必须实现 System.IDisposable 接口。
简单点说就是可以自动释放对象(托管资源)
具体解释:using(){}的使用:
using(){}作为语句,用于定义一个范围,在此范围的末尾将释放对象。
using 语句允许程序员指定使用资源的对象应当何时释放资源。using 语句中使用的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。
比如我们这个实例中:
public class ScoreDAO
{
public void UpdateScore(string userName, int value)
{
using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
{
SqlCommand cmd = conn.CreateCommand();
conn.Open();
cmd.CommandText = @"INSERT INTO SCORES(UserName,Score) Values(@UserName,@Score)";//插入积分
cmd.Parameters.Add(new SqlParameter("@UserName", userName));
cmd.Parameters.Add(new SqlParameter("@Score", value));
cmd.ExecuteNonQuery();
}
}
SqlConnection这个类使用了using语句,转到SqlConnection的定义:
public sealed class SqlConnection : DbConnection, ICloneable
{
...
}
发现SqlConnection继承了DbConnection,再继续转到DbConnection的定义:
public abstract class DbConnection : Component, IDbConnection, IDisposable
{
...
}
发现DbConnection 继承了IDisposable,所以前面SqlConnection 可以使用using语句,继续转到IDisposable的定义:
public interface IDisposable
{
//
// 摘要:
// 执行与释放或重置非托管资源关联的应用程序定义的任务。
void Dispose();
}
IDisposable接口 定义了一个Dispose()方法,用于释放引用对象的资源。
回到上面using(){}的使用:也就是说当到达 using 语句的末尾,或者如果在语句结束之前引发异常并且控制离开语句块等退出 using 语句时,确保在对象上调用 Dispose,自动释放对象(托管资源)。
另外:对于using的使用我们最熟悉的就是使用using指令在文件顶部引入命名空间,如
using System;
using System.IO;