2014-03-01 144 views
1

錯誤:'WinWithStudentDatabase.Broker.FillComboBox()':並非所有代碼 路徑都返回一個值。並非所有的代碼路徑都返回一個值sql

我知道那是什麼錯誤的手段,但不能弄清楚爲什麼它不工作:/ ...這是我的代碼:

public List<Person> FillComboBox() 
    { 
     List<Person> personsList = new List<Person>(); 
     try 
     { 
      string sql = "SELECT * FROM Tperson"; 
      cmd = new SqlCommand(sql, connection); 
      connection.Open(); 

      System.Data.SqlClient.SqlDataReader reader = cmd.ExecuteReader(); 
      while (reader.Read() != null) 
      { 
       Person p = new Person(); 

       p.Id = Convert.ToInt32(reader["ID"].ToString()); 
       p.FirstName = reader["FirstName"].ToString(); 
       p.LastName = reader["LastName"].ToString(); 

       personsList.Add(p); 
      } 
      return personsList; 
     } 
     catch (Exception eX) 
     { 
      MessageBox.Show(eX.Message); 
     } 
     finally 
     { 
      if (connection != null) 
      { 
       connection.Close(); 
      } 
     } 
    } 

有什麼建議?我嘗試剛開始讀DB數據和填充組合框就是所有..

回答

3

你已經宣佈你的函數不返回任何

返回 List<Person>但catch塊退出
catch (Exception eX) 
    { 
     MessageBox.Show(eX.Message); 
     return null; 

     // or return an empty list if more appropriate 
     // return new List<Person>(); 
    } 

編譯器看到你有編碼一個catch塊意味着你期望在這裏處理一個異常。但是當catch塊退出時應該有一個返回值。
很難說在這些情況下返回什麼是正確的方式。我個人更喜歡返回一個空對象並在調用代碼中對此進行測試。 (我避免返回在方法的開始宣佈的最終部分填充列表)

+0

噢IM笨蛋的感謝!其工作正常 – franzp

+0

如果出現錯誤,它還能正常工作嗎?調用代碼是否處理返回的'null'? – CodeCaster

1

問題:如果你正在使用return聲明它應該能夠從所有的代碼塊返回值

解決方案1:所以您需要將其添加到catch塊或功能的末尾。

從try塊刪除return語句return personsList;,並將其添加功能的athe結束

試試這個:

catch (Exception eX) 
    { 
     personsList = null; 
    } 
    finally 
    { 
     if (connection != null) 
     { 
      connection.Close(); 
     } 

    } 
return personsList; 

OR

添加return語句都在嘗試和catch塊

catch (Exception eX) 
    { 
     MessageBox.Show(eX.Message); 
     return null; 
    } 
+0

我永遠不會返回一個部分填充的列表。假設一條記錄的名字列設置爲NULL。這將導致返回人員列表不完整,並且如果用戶不關心消息框,則在真實的生產環境中可能會發生不好的事情。 – Steve

+0

@Steve:好點。讓我編輯我的帖子。 –

1

返回值的方法必須在的所有代碼路徑中都有返回聲明。

在編譯時,你的程序不能知道你的catch塊會不會起作用。這就是爲什麼你應該在你的catch塊中添加一個返回值。

一個解決方案可能是;

catch (Exception eX) 
{ 
    MessageBox.Show(eX.Message); 
    return null; 
} 

欲瞭解更多信息,看看Methods (C# Programming Guide)

相關問題