【问题标题】:Getting Exception "not all code path return a value"获取异常“并非所有代码路径都返回值”
【发布时间】:2014-07-17 10:05:31
【问题描述】:

您好,我有一个使用查询更新 MySQL 表的方法。我使用 MS Visual Studio 和 phpmyadmin 作为 SQL 客户端。

方法:

public static Member updateMember(string un, string pass, string name, string surname,                 string mf, string dob, string add, string phone, string email)
    {




        MySqlConnection connection = new MySqlConnection(conn);
        MySqlCommand cmd;

        string query = "UPDATE MEMBER SET Name='" + un + "', Surname='" + surname + "',      MF='" + mf + "', DOB='" + dob + "', Address='" + add + "', PhoneNo='" + phone + "', EMail='" + email + "', UserName='" + un + "', Password='" + pass + "' ";


        tr y
        {


            connection.Open();
            cmd = connection.CreateCommand();
            cmd.CommandText = query;
            cmd.ExecuteNonQuery();
        }

        catch (Exception)
        {
            throw;
        }
        finally
        {
            if (connection.State == System.Data.ConnectionState.Open)
            {
                connection.Close();

            }
        }
    }

这就是正在发生的事情。我将 TextBoxes 中的一些值以字符串变量的形式存储。然后我将这些字符串变量发送到这个方法。我希望这个方法获取我的字符串变量并用我的变量值更新我的 SQL 表。

我收到一个错误,并非所有代码路径都返回值。

【问题讨论】:

  • 仅供将来参考,这是一个构建错误而非异常。你的标题有点误导
  • 另外你的catch块是多余的,可以把它取出来让你只保留try/finally
  • 请查看绑定参数和using块的使用。

标签: c# mysql visual-studio-2010


【解决方案1】:

你的方法没有返回任何东西,你需要返回成员对象。

如果您不需要返回任何东西,只需像这样更改您的方法签名,

public static Void updateMember(string un, string pass, string name, string surname,string mf, string dob, string add, string phone, string email)

【讨论】:

  • 或者 OP 可以使用返回类型 bool 来了解行是否更新。 return true 当ExecuteNonQuery 返回>0,否则return false
【解决方案2】:

@Sajeetharan 帖子的替代方法是您返回 ExecuteNonQuery 调用的值

connection.Open();
cmd = connection.CreateCommand();
cmd.CommandText = query;
return cmd.ExecuteNonQuery();

当然,您还必须在方法结束时返回一些内容(在 finally 块之后)。

对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。当正在插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也是-1。

Reference

【讨论】:

    【解决方案3】:

    通常,我们在更新/插入或删除时不需要返回像Member 这样的对象。我们应该只返回一个 Boolean 标志或返回 Nothing。

    如果您返回标志,则应将其设置为cmd.ExecuteNonQuery() > 0 的结果,也应设置为Catch 品牌。

    如果你什么都不返回,只需将你的方法修改为

    public static void updateMember(...)
    {
        ....
    }
    

    【讨论】:

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