版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aimin_com/article/details/84146275
简介:
try catch我们之前说过是处理异常的,其实主要处理异常的是catch,而finally中是释放资源的,说白了using在C# 中也是让使用资源的对象释放资源的,无疑和finally差不多,所以使用起来using会更加的方便,接下来我们做一个对比:
对比trycatch:
trycatch类:第一段代码是原始代码,第二段是重构的trycatch代码
/// <summary>
/// 该方法执行传入则增删改的SQL语句
/// </summary>
/// <param name="sql">要执行的SQL语句</param>
/// <returns>返回更新的记录数</returns>
public int ExecuteNonQuery(string sql)
{
string connStr = @"Server=DESKTOP-OU60RPC\SQLSV; Database=newssystem;User ID=sa;Password=123456";
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlCommand cmd=new SqlCommand(sql,conn);
int res=cmd.ExecuteNonQuery();
conn.Close();
return res;
}
首先做三个私有的变量为空,下面的就不用再实例化了;其次制作一个自己的本类(SQLhelper)的构造函数方便下面的使用;最后在使用trycatch连接起来,这样看起来代码量并没有减少太多,虽然减少了耦合,但是看起来还增加了很多东西。
private SqlConnection conn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;
public SQLHelper() //构造函数,在下面就不用单独每个类写了
{
string connStr = @"Server=DESKTOP-OU60RPC\SQLSV; Database=newssystem;User ID=sa;Password=123456";
conn = new SqlConnection(connStr);
}
private SqlConnection GetConn() //打开数据库连接
{
if (conn.State==ConnectionState.Closed)
{
conn.Open(); //先打开在返回
}
return conn;
}
/// <summary>
/// 该方法执行传入则增删改的SQL语句
/// </summary>
/// <param name="sql">要执行的SQL语句</param>
/// <returns>返回更新的记录数</returns>
public int ExecuteNonQuery(string sql)
{
int res;
try
{
cmd = new SqlCommand(sql, GetConn());
res = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn.State==ConnectionState.Open)
{
conn.Close();
}
}
return res;
}
对比using
接下来看我们的using用法:第一个是原始代码,第二个为重构的using方法使用:
/// <summary>
/// 该方法执行传入的SQL查询语句
/// </summary>
/// <param name="sql">SQL查询语句</param>
/// <returns></returns>
public DataTable ExecuteQuery(string sql)
{
DataTable dt = new DataTable();
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader sdr = cmd.ExecuteReader();
dt.Load(sdr);
sdr.Close();
conn.Close();
return dt;
}
using代码的前面和上面trycatch使用的变量和构造函数一样,但是下面的代码从耦合上面还是简洁性都明显的提高了许多许多,并且using使用完毕后会回收using段内的内存,这样提高了很多的效率和性能。
private SqlConnection conn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;
public SQLHelper() //构造函数,在下面就不用单独每个类写了
{
string connStr = @"Server=DESKTOP-OU60RPC\SQLSV; Database=newssystem;User ID=sa;Password=123456";
conn = new SqlConnection(connStr);
}
private SqlConnection GetConn() //打开数据库连接
{
if (conn.State==ConnectionState.Closed)
{
conn.Open(); //先打开在返回
}
return conn;
}
/// <summary>
/// 该方法执行传入的SQL查询语句
/// </summary>
/// <param name="sql">SQL查询语句</param>
/// <returns></returns>
public DataTable ExecuteQuery(string sql)
{
DataTable dt = new DataTable();
conn.Open();
cmd = new SqlCommand(sql, GetConn());
using (sdr=cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
return dt;
}