none
como realizar una actualizacion en mvc 4 RRS feed

  • Pregunta

  • necesito saber como realizar una actualización en mvc 4

    este es el método actualizar 

     public bool Actualizar()
            {
                DBController controller = new DBController();
                bool result = false;
                string qry = "UPDATE USUARIO SET NOMBRE_USUARIO, APELLIDO_PAT, APELLIDO_MAT, FECHA_NAC, CIUDAD, ID_CARGO = '{1}','{2}','{3}','{4}','{5}',{6} WHERE RUT_USUARIO = {0}";
                result = (controller.Exec_NoQuery(string.Format(qry, this.Nombre_usuario, this.Apellido_pat, this.Apellido_mat, this.Fecha_nac, this.Ciudad, this.Id_cargo)) > 0);
                return result;
            }

    el tema es como invocar el método en el controlador....


    martes, 9 de diciembre de 2014 13:24

Respuestas

  • Primero que nada:  No concatene SQL.  Es mala práctica por una variedad de razones, principalmente SQL Inyection y problemas de sintaxis con valores especiales.

    En segundo lugar, recordemos que las acciones de un controlador deben retornar un objeto tipo ActionResult.  Puede usted tener una función que se llame Actualizar() que retorne un Booleano sin problema, pero no puede llamarse directamente con una petición HTTP desde un explorador, y en cambio deberá llamar a la función dentro de un método que sí sea una acción válida.

    //Hay 3 formas de obtener los datos posteados por un HTTP POST:  Parámetros, Request.Form, model binding.
    //Ejemplifico el parámetro id y lo demás lo saco de Request.Form.
    [HttpPost]
    public ActionResult Guardar(int id)
    {
        //Obtener el objeto a guardar.
        var modelo = Negocio.Obtener(id);
        //Aquí podría usar model binding.  Pero bueno, usaré Request.Form.
        //Asignamos nuevos valores a las propiedades.
        modelo.Prop1 = Request.Form["Prop1"];
        modelo.Prop2 = Convert.ToInt32(Request.Form["Prop2"]);
        //Aquí guardamos.  Como estamos trabajando con un objeto podríamos tener EF o algún otro ORM.
        //Yo haré una función sencilla aparte.
        //El valor de retorno será un JSON con una propiedad tipo int.  Valor 0 = exitoso.
        dynamic result = null;
        try
        {
            Actualizar(modelo);
            result = new { ReturnValue = 0 };
        }
        catch (System.Exception ex)
        {
            result = new { ReturnValue = 1, ErrorMessage = ex.Message };
        }
        return Json(result);
    }
    
    private void Actualizar(<tipo del modelo> modelo)
    {
        using (SqlConnection conn = new SqlConnection(<aquí el connection string>))
        {
            string sql = "Update tabla set Prop1 = @prop1, Prop2 = @prop2 Where ID = @id";
            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                cmd.Parameters.Add("id", SqlDbTypes.Int).Value = modelo.ID;
                cmd.Parameters.Add("prop1", SqlDbTypes.NVarChar).Value = modelo.Prop1;
                cmd.Parameters.Add("prop2", SqlDbTypes.Int).Value = modelo.Prop2;
                cmd.ExecuteNonQuery();
            }
        }
    }
    

    Aquí encuentra una explicación de las 3 formas de obtener datos de la vista en el método de acción.

    Aquí encuentra información acerca de la función Json().

    Lo bonito de devolver Json es que puede entonces usar jQuery para postear los datos via Ajax y simplemente examinar la propiedad ReturnValue del objeto JSON devuelto y así informar al usuario si algo malo pasó.


    Jose R. MCP
    Code Samples

    martes, 9 de diciembre de 2014 16:52