none
Modificar datos mediante metodos RRS feed

  • Pregunta

  • Saludos, estoy tratando de actualizar los datos de una bd mediante metodo y no he podido lograrlo, solo guardar. mi codigo es el siguiente:

            public void Guardar(claseProveedor gu)
            {
                conex.Open();
                string codigo;
                codigo = "insert into proveedores (nombre, telefono,direccion,marca) values(@nomb, @tel,@dir,@marca )";
                NpgsqlCommand comando = new NpgsqlCommand(codigo, conex);
                comando.Parameters.AddWithValue("@nomb", gu.nombre);
                comando.Parameters.AddWithValue("@tel", gu.telefono);
                comando.Parameters.AddWithValue("@dir", gu.direccion);
                comando.Parameters.AddWithValue("@marca", gu.marca);
                comando.ExecuteNonQuery();
                conex.Close();
            }
            public void Modificar(claseProveedor mod)
            {
                conex.Open();
                string codigo;
                codigo = "UPDATE proveedores set nombre= @nomb, telefono=@tel, direccion=@dir, marca=@marca where id =@id";
                NpgsqlCommand comando = new NpgsqlCommand(codigo, conex);
                comando.Parameters.AddWithValue("@id", mod.id);
                comando.Parameters.AddWithValue("@nomb", mod.nombre);
                comando.Parameters.AddWithValue("@tel", mod.telefono);
                comando.Parameters.AddWithValue("@dir", mod.direccion);
                comando.Parameters.AddWithValue("@marca", mod.marca);
                comando.ExecuteNonQuery();
                conex.Close();
            }

    en el boton de cambios:

      private void btncambios_Click(object sender, EventArgs e)
            {
                claseProveedor mod = new claseProveedor();
                BD Datos = new BD();
                mod.id = txtid.Text;
                mod.nombre = txtnompro.Text;
                mod.telefono = txttelefono.Text;
                mod.direccion = txtdireccion.Text;
                mod.marca = txtmarca.Text;
                Datos.Modificar(mod);
            }

    el error que tengo es el siguiente:

    {"42883: el operador no existe: integer = text"}.

    alguna conversion que tenga que realizar o algun problema en el codigo en si, su ayuda porfavor. de antemano gracias

    sábado, 10 de diciembre de 2016 22:29

Respuestas

  • Julio_a,

    ¿Qué tipo de dato es la columna 'id' en tu tabla de base de datos? ¿int2? ¿int4?. De ser así, la propiedad 'id' -de la clase claseProveedor- debe de ser también numérica, es decir, debe ser un tipo Int16 o Int32 (según el tipo de la columna). Además de eso, al momento de asignar el valor contenido en la propiedad Text del objeto txtid, debes convertir la representación numérica a un valor numérico:

     mod.id = Convert.ToInt32(txtid.Text);

    Imagino que la columna 'telefono' es de un tipo varchar(n), ¿verdad?


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Julio_a sábado, 10 de diciembre de 2016 22:56
    sábado, 10 de diciembre de 2016 22:43

Todas las respuestas

  • este es el formulario:

    cuando le doy click a modificar se cargan los datos a los texbox de al lado y ahi se supone que deba de poder realizar cambios en ellos.

    sábado, 10 de diciembre de 2016 22:32
  • Julio_a,

    ¿Qué tipo de dato es la columna 'id' en tu tabla de base de datos? ¿int2? ¿int4?. De ser así, la propiedad 'id' -de la clase claseProveedor- debe de ser también numérica, es decir, debe ser un tipo Int16 o Int32 (según el tipo de la columna). Además de eso, al momento de asignar el valor contenido en la propiedad Text del objeto txtid, debes convertir la representación numérica a un valor numérico:

     mod.id = Convert.ToInt32(txtid.Text);

    Imagino que la columna 'telefono' es de un tipo varchar(n), ¿verdad?


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Julio_a sábado, 10 de diciembre de 2016 22:56
    sábado, 10 de diciembre de 2016 22:43
  • Si la columna telefono es varchar.

    tipo de id:

    y respescto a la conversion, trate de intentarlo y no me lo permite:

    sábado, 10 de diciembre de 2016 22:52
  • lei bien tu comentario, el problema radicaba en la clase proveedor. tenia esto:

            public string id { get; set; }
            public string nombre { get; set; }
            public string telefono { get; set; }
            public string direccion { get; set; }
            public string marca { get; set; }

    y tenia que tener esto:

            public int id { get; set; }
            public string nombre { get; set; }
            public string telefono { get; set; }
            public string direccion { get; set; }
            public string marca { get; set; }


    sábado, 10 de diciembre de 2016 22:57
  • Julio_a,

    En la respuesta anterior te mencioné que la propiedad id de la clase claseProveedor debería ser de un tipo numérico, ¿hiciste el cambio?.

    public class claseProveedor
    {
             public int id { get; set; }
             //...
    }


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 10 de diciembre de 2016 22:58