none
Actualizar inventario procedimiento almacenado RRS feed

  • Pregunta

  • Tengo un procedimiento almacenado para actualizar la existencia de mi inventario. Este es el código en SQL:

     ALTER PROCEDURE [dbo].[SP_ActualizaInventario]
     @cantidad INT
    ,@Producto INT
    ,@Tipo INT
    AS
    BEGIN
    DECLARE @Existencia INT 
    SET @Existencia = (SELECT Existencia FROM maestraproductoinventario WHERE [Codigo De Articulo] = @Producto)
    if(@Tipo = 1)
    begin
    UPDATE
     maestraproductoinventario 
     SET
        Existencia = @Existencia - @cantidad 
        WHERE [Codigo De Articulo] = @Producto
    end
    else
    begin
    UPDATE
     maestraproductoinventario 
     SET
        Existencia = @Existencia + @cantidad 
        WHERE [Codigo De Articulo] = @Producto
    end
    END



    samuel

    jueves, 15 de junio de 2017 0:53

Todas las respuestas

  • lo uso asi en c#:

    SqlConnection conec = new SqlConnection();
    SqlCommand cm = new SqlCommand();
    cm.Connection = con;
    cm.CommandText = "SP_ActualizaInventario";
    cm.CommandType = CommandType.StoredProcedure;
    
    cm.Parameters.Add(new SqlParameter("@cantidad", SqlDbType.Int));
    cm.Parameters["@cantidad"].Value = txtcantidad.Text.Trim();
    
    cm.Parameters.Add(new SqlParameter("@Producto", SqlDbType.Int));
    cm.Parameters["@Producto"].Value = txtcodigo.Text.Trim();
    
    cm.Parameters.Add(new SqlParameter("@Tipo", SqlDbType.Int));
    cm.Parameters["@Tipo"].Value = 2;
    
    con.Open();
    cm.ExecuteNonQuery();

    y cuando lo utilizo en la compra me da un error de tipo de dato, me dice esto:

    An unhandled exception of type 'System.FormatException' occurred in System.Data.dll Additional information: Failed to convert parameter value from a String to a Int32.

    No entiendo por qué, ¿alguien tiene una idea?


    samuel

    jueves, 15 de junio de 2017 0:53
  • Hola

    Te falta convertir a Int lo que traes en tus cajas de texto:

    cm.Parameters.Add(new SqlParameter("@cantidad", SqlDbType.Int));
    cm.Parameters["@cantidad"].Value = Convert.toInt32(txtcantidad.Text.Trim());
    
    cm.Parameters.Add(new SqlParameter("@Producto", SqlDbType.Int));
    cm.Parameters["@Producto"].Value = Convert.toInt32(txtcodigo.Text.Trim());

    Recuerda que como tal, los textbox almacenan String y debes convertirla al tipo de dato que desees.

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    jueves, 15 de junio de 2017 1:01
  • Buenas, primero gracias por tomarte el tiempo de responder a mi pregunta.

    intente tu codigo y me da este error:

    Input string was not in a correct format.


    samuel

    jueves, 15 de junio de 2017 1:06
  • Hola,

    Exactamente en donde te aparece? realizaste un punto de interrupción,cambia tu código así:

    cm.Parameters.AddWithValue("@cantidad", Convert.ToInt32(txtcantidad.Text));
    cm.Parameters.AddWithValue("@Producto", Convert.ToInt32(txtcodigo.Text));
    cm.Parameters.Add("@Tipo", 2);
    //OJO: abre conexión a tu objeto connection:
    conec.Open();
    cm.ExecuteNonQuery();
                       

    Si no te resulta dificil, puedes aún mejorarlo así, pero primero intenta lo anterior y realiza el punto de interrupción para saber en que línea te da el error

     using (SqlConnection conec = new SqlConnection(con))
                {
                    using (SqlCommand cm = new SqlCommand(""SP_ActualizaInventario",conec))
                    {
                        cm.CommandType = CommandType.StoredProcedure;
    
                        cm.Parameters.AddWithValue("@cantidad", Convert.ToInt32(txtcantidad.Text));
                        cm.Parameters.AddWithValue("@Producto", Convert.ToInt32(txtcodigo.Text));
                        cm.Parameters.Add("@Tipo", 2);
                        conec.Open();
                        cm.ExecuteNonQuery();
                    }
                }

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    jueves, 15 de junio de 2017 1:13
  • realice la primera parte que me indicaste me da el mismo error: input string was not in the correct format

    ahora tengo el codigo asi:

    SqlConnection conec = new SqlConnection();
                SqlCommand cm = new SqlCommand();
                cm.Connection = con;
                cm.CommandText = "SP_ActualizaInventario";
                cm.CommandType = CommandType.StoredProcedure;

                cm.Parameters.AddWithValue("@cantidad", Convert.ToInt32(txtcantidad.Text));   aqui me tira el error
                cm.Parameters.AddWithValue("@Producto", Convert.ToInt32(txtcodigo.Text));
                cm.Parameters.AddWithValue("@Tipo", 2);

                con.Open();
                cm.ExecuteNonQuery();


    samuel

    jueves, 15 de junio de 2017 1:19
  • Qué datos le estás ingresando a las cajas de texto? letras? espacios? puntos? recuerda que es entero, si por ejempo estás ingresando así : 10.50 (esto es decimal) lo que implicaría hacer un Convert.ToDecimal, pero en tu procedimiento esperas Int

    Y sigo insistiendo en tu conexión, abre el objeto Connection , manéjalo así

                SqlConnection conec = new SqlConnection(con);
                SqlCommand cm = new SqlCommand("SP_ActualizarInventario",conec);
                //cm.Connection = con;
                //cm.CommandText = "SP_ActualizaInventario";
                cm.CommandType = CommandType.StoredProcedure;
    
                cm.Parameters.AddWithValue("@cantidad", Convert.ToInt32(txtcantidad.Text));   aqui me tira el error
                cm.Parameters.AddWithValue("@Producto", Convert.ToInt32(txtcodigo.Text));
                cm.Parameters.AddWithValue("@Tipo", 2);
    
                conec.Open();
                cm.ExecuteNonQuery();


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    jueves, 15 de junio de 2017 1:22
  •  estoy utilizando a modo de ejemplo el codigo 1 y cantidad 5,

    si utilizo el codigo que me dices:

       SqlConnection conec = new SqlConnection(con);   no puedo utilizar convertir un objeto system.data.sqlclient to string
                SqlCommand cm = new SqlCommand("SP_ActualizarInventario",conec);
                //cm.Connection = con;
                //cm.CommandText = "SP_ActualizaInventario";
                cm.CommandType = CommandType.StoredProcedure;
    
                cm.Parameters.AddWithValue("@cantidad", Convert.ToInt32(txtcantidad.Text));   aqui me tira el error
                cm.Parameters.AddWithValue("@Producto", Convert.ToInt32(txtcodigo.Text));
                cm.Parameters.AddWithValue("@Tipo", 2);
    
                conec.Open();
                cm.ExecuteNonQuery();


    samuel

    jueves, 15 de junio de 2017 1:41
  • Que contiene con???

    con debería ser:

    string con = "Server=..;Database=Base....";
    SqlConnection conec = New SqlConnection(con);
    ..
    .
    .
    .
    .
    conec.Open();
    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.


    jueves, 15 de junio de 2017 1:51
  • string con= ("Data Source=SAMUELSUSANA; Initial catalog=proyectoI;integrated security=true");
                SqlConnection conec = new SqlConnection(con); 
                SqlCommand cm = new SqlCommand("SP_ActualizarInventario", conec);
                cm.Connection = conec;
                cm.CommandText = "SP_ActualizaInventario";
                cm.CommandType = CommandType.StoredProcedure;

                cm.Parameters.AddWithValue("@cantidad", Convert.ToInt32(txtcantidad.Text)); 
                cm.Parameters.AddWithValue("@Producto", Convert.ToInt32(txtcodigo.Text));
                cm.Parameters.AddWithValue("@Tipo", 2);

                conec.Open();
                cm.ExecuteNonQuery();

    seria algo asi?

    si es asi aun me sigue diciendo input string was not in the correct format


    samuel

    jueves, 15 de junio de 2017 2:01
  • Le estás volviendo asignar el nombre de la conexión y el store, déjalo así:

                string con = ("Data Source=SAMUELSUSANA; Initial catalog=proyectoI;integrated security=true");
                SqlConnection conec = new SqlConnection(con);
                SqlCommand cm = new SqlCommand("SP_ActualizarInventario", conec);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@cantidad", Convert.ToInt32(txtcantidad.Text.Trim()));
                cm.Parameters.AddWithValue("@Producto", Convert.ToInt32(txtcodigo.Text.Trim()));
                cm.Parameters.AddWithValue("@Tipo", 2);
                conec.Open();
                cm.ExecuteNonQuery();
                conec.Close();

    Ahora lo que me dices es que el error te lo da en txtCantidad, le das el valor 1 y 5 por lo que me dices.. estás completamente seguro que tu txtCantidad contiene ese valor? te fijaste los nombres de tus controles? fíjate con un punto de interrupción y analiza lo que hay dentro de la caja en el paso a paso

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    jueves, 15 de junio de 2017 2:11
  • sigue dandome el error en el txtcantidad
    los valores que me dice que ingreso son los que te dije codigo 1 y txtcantidad 5

    samuel

    jueves, 15 de junio de 2017 2:19
  • inténtalo así, pero no comprendo por qué persiste el error:

                string con = ("Data Source=SAMUELSUSANA; Initial catalog=proyectoI;integrated security=true");
                SqlConnection conec = new SqlConnection(con);
                SqlCommand cm = new SqlCommand("SP_ActualizarInventario", conec);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add("@cantidad",SqlDbType.Int).Value = Convert.ToInt32(txtcantidad.Text);
                cm.Parameters.Add("@Producto",SqlDbType.Int).Value = Convert.ToInt32(txtcodigo.Text);
                cm.Parameters.Add("@Tipo",SqlDbType.Int).Value = 2;
                conec.Open();
                cm.ExecuteNonQuery();
                conec.Close();


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    jueves, 15 de junio de 2017 2:37
  • hermano aun persiste el problema, yo tampoco entiendo por que por eso pregunte aqui:
    mira mas info  despues del procedimiento procedo a almacenar pero la informacion la traigo de un datagrid para luego mandarla a la base mediante este codigo no se si afece

     SqlCommand insertar = new SqlCommand("insert into compras values (@1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17)", conec);
                conec.Open();

                try
                {
                    foreach (DataGridViewRow row in dataGridView1.Rows)
                    {

                        insertar.Parameters.Clear();

                        insertar.Parameters.AddWithValue("@1", Convert.ToString(row.Cells["Column1"].Value));
                        insertar.Parameters.AddWithValue("@2", Convert.ToString(row.Cells["Column2"].Value));
                        insertar.Parameters.AddWithValue("@3", Convert.ToString(row.Cells["Column3"].Value));
                        insertar.Parameters.AddWithValue("@4", Convert.ToString(row.Cells["Column4"].Value));

    samuel

    jueves, 15 de junio de 2017 2:47