我有以下代码:
public DataTable GetAllActiveUsers()
{
DataTable dataTable = new DataTable();
try
{
connection.Open();
SqlCommand getAllActiveUsersCommand = new SqlCommand(getAllUsers, connection);
SqlDataAdapter dataAdapter = new SqlDataAdapter(getAllActiveUsersCommand);
dataAdapter.Fill(dataTable);
return dataTable;
}
catch(Exception e)
{
Console.WriteLine(e);
return null;
}
finally
{
connection.Close();
}
}基本上获取的是我的数据库中的活跃用户。但是谁能向我解释一下,如果Finally块成功运行try块并返回DataTable,它是否会被执行?
谢谢
发布于 2015-12-22 18:18:48
是。
如下所述:MSDN
通常情况下,finally块的语句在控制离开try语句时运行。控制权的转移可能是正常执行、break、continue、goto或return语句执行的结果,也可能是try语句之外传播异常的结果。
但是finally块并不总是被执行。你可以读一下Alex Papadimoulis的轶事here
发布于 2015-12-22 18:19:32
是的,确实如此。
无论try {} catch()块中是否有return语句或异常抛出,都将执行finally块。
发布于 2015-12-22 18:33:23
最后,始终执行块。
你应该在finally块中进行处理。因为,dispose还会关闭连接并释放非托管内存资源。
finally
{
connection.Dispose();
}https://stackoverflow.com/questions/34413370
复制相似问题