try catch的行为,最后是c#中的return语句工作流

时间:2013-03-27 13:01:24

标签: c# .net exception try-catch finally

我对此尝试,捕获以及最后使用return语句工作流程毫无疑问......

此功能用于检索主管视图的员工休假信息。它工作得很好,但如果找到if语句的数据,它将返回,否则块将返回。即使两者都获得了回报,它也会最终声明。 我不知道为什么?

此处的代码段:

List<Leave> ILeaveData.GetLeaveForSupervisorView(int userID)
{
    SqlConnection con = new SqlConnection(_connectionString);
    SqlCommand cmd = new SqlCommand("Storeprocedurename", con);
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int));
    cmd.Parameters["@Id"].Value = userID;

    // Get employee leave information

    try
    {
        con.Open();
        DataSet ds = new DataSet();
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = cmd;
        adapter.Fill(ds);


        if (ds.Tables[0].Rows.Count > 0)
        {
            List<Leave> leave = new List<Leave>();
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                leave.Add(CreateLeaveForAdminViewFromDataRow(ds.Tables[0].Rows[i]));
            }
            return leave; // if data found then statement return here
        }
        else
        {
            return null; // otherwise return here
            // throw new Exception("Data Error");
         }
      }
      catch (SqlException err)
      {
          IErrorLog elog = new ErrorLog(_connectionString);
          elog.LogSystemError(err);
          throw new ApplicationException("Data Error", (Exception)err);
      }
      finally
      {
          if (con != null)
          {
              con.Close();
          }
       }
   }

问候 沙瓦

3 个答案:

答案 0 :(得分:10)

最后语句总是被执行,即使没有异常发生。

http://msdn.microsoft.com/en-gb/library/zwc8s4fz(v=vs.110).aspx

  

通常,当控件离开try语句时,finally块的语句会运行。控制权的转移可以通过正常执行,执行 break,continue,goto或return 语句,或者从try语句中传播异常来实现。

答案 1 :(得分:3)

finally块旨在始终执行,无论是否抛出异常。

答案 2 :(得分:1)

将在所有情况下执行最后一个块。