【问题标题】:Not all code paths return a value sql并非所有代码路径都返回值 sql
【发布时间】:2014-04-02 13:09:31
【问题描述】:

错误:'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();
            }
        }
    }

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

【问题讨论】:

    标签: c# sql-server winforms error-handling path


    【解决方案1】:

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

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

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

    试试这个:

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

    在 try 和 catch 块中都添加 return 语句

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

    【讨论】:

    • 我永远不会返回一个部分填写的列表。假设一条记录的名字列设置为 NULL。这将导致返回的人员列表不完整,如果用户不关心消息框,那么在实际生产环境中可能会发生不好的事情。
    【解决方案2】:

    你已经声明你的函数返回一个List&lt;Person&gt;但是catch块退出而不返回任何东西

        catch (Exception eX)
        {
            MessageBox.Show(eX.Message);
            return null;
    
            // or return an empty list if more appropriate 
            // return new List<Person>();
        }
    

    编译器看到您编写了一个 catch 块,这意味着您希望在此处处理异常。但是当 catch 块退出时应该有一个返回值。
    很难说在这些情况下返回的正确方法是什么。我个人更喜欢返回一个空对象并在调用代码中对此进行测试。 (我避免返回在方法开始时声明的最终部分填充的列表)

    【讨论】:

    • 万一出错也能正常工作吗?调用代码是否处理返回的null
    【解决方案3】:

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

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

    一个解决方案可能是;

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

    欲了解更多信息,请查看Methods (C# Programming Guide)

    【讨论】:

      猜你喜欢
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 2013-10-06
      • 2016-02-14
      • 2019-05-26
      相关资源
      最近更新 更多