错误:并非所有代码路径都返回值?

Zar*_*ood 3 c# sql sql-server-2012

我收到此错误(并非所有代码路径返回值).我想用唯一键约束在我的数据库中插入数据.但是当我在我的代码中添加它时,我的方法给了我这个错误.

这是我的代码

  public string Insert()
    {

        SqlConnection Conn = new SqlConnection(@"Data Source=ZARAK\SQLEXPRESS;Initial Catalog=ProjectDAL;integrated security=true");


        try
        {
            Conn.Open();
            SqlCommand cmd = new SqlCommand("Insert INTO tbl_User(Name,Email,Password) VALUES ('" + name + "','" + email + "','" + password + "')", Conn);


            int restl = cmd.ExecuteNonQuery();
            //temp = true;
            return "Record Inserted successfully!";
        }
        catch (SqlException ex)
        {
            if (ex.Number == 2627)
            {
                 return "Record Already Exists";
            }
        }
        finally
        {
            Conn.Close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

atl*_*ste 8

你的问题在这里:

catch (SqlException ex)
{
    if (ex.Number == 2627)
    {
        return "Record Already Exists";
    }
    // **
}
Run Code Online (Sandbox Code Playgroud)

如果查看应用程序的代码路径,每个代码路径if也会隐式添加一个else.在这种情况下,else它不包含return语句,因此错误.

然后是例外......

处理特殊情况的例外情况.软件开发人员之间存在这种隐含的协议,catch意味着要适当地处理它.

处理它的一种方法是通知用户记录已经存在(我猜这是你做的).如果发生了其他事情,通知用户错误并不总是有效的; 你可能只想在几秒钟内再次尝试(死锁)或做其他事情.通常你会在更高级别上处理类似的代码,并让异常涟漪.

结果,我不能告诉你**的代码需要什么; 你需要根据你想要达到的目标自己决定.

例如:

catch (SqlException ex)
{
    if (ex.Number == 2627)
    {
        return "Record Already Exists"; // user needs to do something
    }

    // We don't want to handle the rest here:
    throw;
}
Run Code Online (Sandbox Code Playgroud)