获取异常“并非所有代码路径都返回值”

Posted

技术标签:

【中文标题】获取异常“并非所有代码路径都返回值”【英文标题】: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块的使用。 【参考方案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 trueExecuteNonQuery 返回>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(...)

    ....

【讨论】:

以上是关于获取异常“并非所有代码路径都返回值”的主要内容,如果未能解决你的问题,请参考以下文章

错误 CS0161 的原因:并非所有代码路径都返回值

如何解决 bool 方法上的“并非所有代码路径都返回值”?

声明一个总是抛出异常的方法?

在一行上给出一串数字,用空格分隔

如何获取程序返回值,退出码,错误码

shell 脚本 变量 获取程序输出结果异常分析