我真的读了所有其他帖子,但没有人真正回答我的问题。
这是我的函数,它返回一个表
public DataTable ReturnTable()
{
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(mainConnectionString))
{
con.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = CommandType.Text;
SQL = " SELECT * from table";
cmd.CommandText = SQL;
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dt);
}
}
}
return dt;
}
之前针对以下内容的优势是什么(我在发现'使用'之前总是使用的那个):
public DataTable ReturnTable()
{
DataTable dt = new DataTable();
SqlConnection con = new SqlConnection(mainConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
SQL = " SELECT * from table";
cmd.CommandText = SQL;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
con.Close();
return dt;
}
用秒,是不是con,cmd和da妥善处理? 第二个问题有什么问题吗?
谢谢!
答案 0 :(得分:4)
第二个是否有问题?
只要您的代码中没有异常,这对con
的工作方式就会一样,因为Close()
和Dispose()
实际上是相同的 in这种情况。它不会立即处理da
或cmd
,并会等到它们被垃圾收集以释放资源。
using
的优势在于,即使在异常或提前退出方法的情况下(您在方法中间添加了return
),您的资源仍会被处理。
答案 1 :(得分:0)
优点是using
模式调用Dispose()
接口上的IDisposable
方法,保证您可能错过的任何清理逻辑被正确执行,即使抛出异常。
实际上,实现IDisposable
的对象会持有非托管资源,这些资源会在调用Dispose()
时被清除。因此,调用Close()
可能还不够。
答案 2 :(得分:0)
不,他们不相同。这就是using
的整个点。
如果您的代码抛出异常会怎样?在垃圾收集器碰巧碰到它之前,这些对象不会被丢弃。
答案 3 :(得分:0)
“using”in尝试实现RAII模式,这在处理数据库连接等有限资源时特别有用。