在c#中使用using语句处理与数据库相关的类是最佳实践
本文关键字:最佳 数据库 using 处理 语句 | 更新日期: 2023-09-27 18:18:27
using
语句自动执行IDisposable中包含的Dispose方法,数据库相关类(如SqlConnection、SqlCommand等)实现该接口。
using
语句来创建对象,以便在操作结束时释放资源?例如,由于某种原因,我需要使用SqlConnection, SqlCommand, SqlDataAdapter和DataTable,所以我在下面写了这段代码,这是最好的方法吗?或者我应该把Dispose()放在try的finally子句中…赶上……最后呢?
using (SqlConnection con = new SqlConnection(Properties.Settings.Default.ConnectionString))
using (SqlCommand cmd = new SqlCommand())
using (SqlDataAdapter da = new SqlDataAdapter())
using (DataTable dt = new DataTable())
{
// Do something...
}
你的方式是正确的。Dispose()方法将自动调用Close()。对于实现IDisposable的所有东西来说,这并不一定都是正确的,但对于与db相关的类来说,这是正确的。
完成Chris回答:
如果你用try/finally的方式,你必须检查是否所有的实例都不是空的:
try
{
SqlConnection con = new SqlConnection(Properties.Settings.Default.ConnectionString);
...
}
finally
{
if (con != null) con.Dispose();
if (cmd != null) cmd...
}
using语句正是为了简化这种用例。顺便说一下,它可以做更多很酷的事情:http://pragmateek.com/c-scope-your-global-state-changes-with-idisposable-and-the-using-statement/
Chris的回答是正确的,但是请注意一些当前的数据库实现实际上并没有在它们的Dispose
调用中做太多的事情。
这可能意味着"差"但简单的代码,例如返回DataTable
本身,实际上可能与"适当"的代码资源使用没有太大区别。
但是因为这些类已经实现了IDisposable
,所以你应该始终使用Using
,以防将来它们的实现发生变化来实际处理一些东西。