并非所有代码路径都返回值 sql



错误:"WinWithStudentDatabase.Broker.FillComboBox()":并非所有代码 路径返回一个值。

我知道这个错误意味着什么,但无法弄清楚为什么它不起作用:/...这是我的代码:

 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();
            }
        }
    }

有什么建议吗? 我只是试图从我的数据库中读取数据并填充组合框,仅此而已。

您已声明函数返回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 块退出时,应该有一个返回值。
很难说在这些情况下返回的正确方式是什么。我个人更喜欢返回一个空对象并在调用代码中对此进行测试。(我避免返回在方法开始时声明的最终部分填充列表)

返回值的方法必须在所有代码路径中具有 return 语句。

在编译时,你的程序无法知道你的catch块是否有效。这就是为什么你也应该在catch块中添加一个返回值。

一种解决方案可能是;

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

有关更多信息,请查看Methods (C# Programming Guide)

问题:如果您使用的是return语句,它应该能够从所有代码块返回值。

解决方案 1:因此您需要将其添加到catch块或函数末尾。

从 try 块中删除 return 语句return personsList;并将其添加到函数末尾

试试这个:

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

在 try 和 catch 块中添加返回语句

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

最新更新