C#SQL DELETE仅返回TRUE

时间:2015-07-01 14:11:35

标签: c#

我的代码只返回true,我不知道它在哪里。

public bool Delete(int RGP)
{
    vsql = "DELETE FROM pescador WHERE RGP LIKE @RGP";
    SqlCommand cmd = null;

    if (this.Conectar())
    {
        try
        {
            cmd = new SqlCommand(vsql, objCon);
            cmd.Parameters.AddWithValue("@RGP", RGP);
            cmd.ExecuteNonQuery();

            return true;
        }
        catch(SqlException sqlerro)
        {
            throw sqlerro;
        }

        finally
        {
            this.Desconectar();
        }
    }
    else
        return false;

}

2 个答案:

答案 0 :(得分:2)

看:这个片段没用:

  catch(SqlException sqlerro)
  {
    throw sqlerro; // exception catched and thrown unmodified
  }

如果您想在查询失败时返回false

  catch(SqlException sqlerro) {
    return false;
  }

如果没有更改记录,则要返回false :

  return cmd.ExecuteNonQuery() > 0;

最后,不要忘记使用 arrowhead antipattern 可读性等。

public bool Delete(int RGP) {
  // Argument/State validation
  if (objCon == null)
    return false; // No connection

  // SQL should be readable
  vsql = @"delete 
             from Pescador 
            where Rgp like @RGP";

  try {
    // Dispose IDisposable (via using)
    using (SqlCommand cmd = new SqlCommand(vsql, objCon)) {
      cmd.Parameters.AddWithValue("@RGP", RGP);
      //TODO: be sure that SET NOCOUNT is not ON 
      return cmd.ExecuteNonQuery() > 0;
    }
  }
  finally {
    Desconectar();
  }
}

答案 1 :(得分:1)

你总是回归真实。检查你的代码。这应该是这样的:

int i = cmd.ExecuteNonQuery();
return Convert.ToBoolean(i);

或者:

int i = cmd.ExecuteNonQuery();
if(i > 0)
    i = 1;
else
    i = 0;
return Convert.ToBoolean(i);