【发布时间】:2014-11-14 16:32:43
【问题描述】:
我有以下代码。
private DataTable LoadSMSCellProviders()
{
string sqlQuery = "Select * from SMSAddress";
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(Utility.ConnString))
{
using (SqlCommand command = new SqlCommand(sqlQuery, conn))
{
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(dt);
return dt;
}
}
}
Microsoft 代码分析告诉我,dt 并未沿所有执行路径进行处理,但我不确定如何更正此问题。如果我尝试在return 之前调用dispose,它将返回一个空值,如果我尝试在方法结束时执行此操作,则代码永远不会到达...
我在这里错过了什么?
这是来自分析工具的消息:
警告:CA2000:Microsoft.Reliability:在方法“x.x()”中,对象 'dt' 不会沿所有异常路径进行处理。称呼 System.IDisposable.Dispose 在对象“dt”上的所有引用之前 超出范围。
【问题讨论】:
-
这个想法是,如果发生异常,您需要将其处理掉。
-
LoadSMSCellProviders()的调用方法负责处理返回的DataTable。