none
consulta procedimiento almacenado mysql RRS feed

  • Pregunta

  • asp.net vb

    mysql 

    hola 

    foreros sin un forero me puede encaminar en mi problema por favor tengo un procedimento para insertar datos pero me arroja un error 

    procedimiento almacenado

    mi tabla es esta detallacotizacion

    id,codigo_producto,Cantidad,Descripcion,Precio,Total,Numero_cotizacion

    el id = el que tiene autoincremento

    no lo puese en el procedimento almacenado pensado que se autoicrementaba solo

    me manda este error

    column count doesn´t match value count at row 1

    pero ese error es por las columa id 

    pero si lo pongo me mada otro error

    incorrect number of arguments for procedure
    expected 7,got6

    CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_INSERT_DetalleCotizacion`(
    
    IN Codigo_Producto VARCHAR (45),
    IN Cantidad DECIMAL (18,2),
    IN Descripcion VARCHAR (45),
    IN Precio DECIMAL (18,2),
    IN Total DECIMAL (18,2),
    IN Numero_Cotizacion int)
    BEGIN
    INSERT INTO detalle_cotizacion VALUES (Codigo_Producto,Cantidad,Descripcion,Precio,Total,Numero_Cotizacion);
    end

     Public Function insertardetallecotizacion(datos As vdetalle_cotizacion) As Integer
    
            'Declaramos una variable Mysqlcomand'
            Dim cmd As New MySqlCommand
            Try
                'Usuamos nuestra conexion' 
                cmd.Connection = conn
                'indicamos que utilizaremos un procedimiento'
                cmd.CommandType = CommandType.StoredProcedure
                'indicamos el nombre del procedimiento de nuestra base de datos MYSQL'
                cmd.CommandText = "SP_INSERT_DetalleCotizacion"
                'Declaramos e igualamos los parametros nuestro procedimiento SP_INSERT_detallecotizacion y de la funcion'
                cmd.Parameters.Add("?Codigo_Producto", MySqlDbType.VarChar, 45).Value = datos._Codigo_Producto
                cmd.Parameters.Add("?Cantidad", MySqlDbType.Decimal, 10, 2).Value = datos._Cantidad
                cmd.Parameters.Add("?Descripcion", MySqlDbType.VarChar, 50).Value = datos._Descripcion
                cmd.Parameters.Add("?Precio", MySqlDbType.Decimal, 10, 2).Value = datos._Precio
                cmd.Parameters.Add("?Total", MySqlDbType.Decimal, 10, 2).Value = datos._Total
                cmd.Parameters.Add("?Numero_Cotizacion", MySqlDbType.Int32).Value = datos._Numero_Cotizacion
                'Declaramos un integer(entero)'
                Dim i As Integer
                'Abrimos nuestra conexion'
                conn.Open()
                'Se almacenara en nuestro entero el valor de la ejecucion de nuestro procedimiento'
                'por ejemplo si 0 no se pudo ejecutar, en cambio si es 1 se ejecuto correctamente'
                i = cmd.ExecuteNonQuery()
                'Cerramos nuestra conexion'
                conn.Close()
                'Nos retornara un resultado'
                Return i
            Catch ex As MySqlException
                Return MsgBox(ex.Message)
                'MsgBox("Error al operar con la base de datos!", MsgBoxStyle.Critical, "Error!")
            End Try


    miércoles, 25 de marzo de 2015 15:12

Respuestas

  • hola

    lo que aconsejaria es que en el INSERT definas los campos

    INSERT INTO detalle_cotizacion (campo1, campo2, ...) VALUES (Codigo_Producto,Cantidad,Descripcion,Precio,Total,Numero_Cotizacion);

    de esta form indicas que campos mapean con los parametros

    ademas el campo id de la tabla lo defines como IDENTITY para que se autoincremente el valor de forma secuencial ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP miércoles, 25 de marzo de 2015 15:20
    • Marcado como respuesta djnilo miércoles, 25 de marzo de 2015 15:40
    miércoles, 25 de marzo de 2015 15:19
  • Hola,

    No es un problema de sintaxis del lenguaje que ocupas sino de sql para tu gestor de base de datos.

    No se como va en MySql pero recomendaré bajo SQL Server que para el tema conceptual no debería haber diferencias. Es correcto que no envíes un valor para una columna auto-incrementable, pero deberías indicar explicitamente la lista de columnas y valores.

    BEGIN
    INSERT INTO detalle_cotizacion (Codigo_Producto,Cantidad,Descripcion,Precio,Total,Numero_Cotizacion) VALUES (Codigo_Producto,Cantidad,Descripcion,Precio,Total,Numero_Cotizacion);
    END

    Marco en negrita la definición del nombre de las columnas que asumo son iguales a los nombres de los parámetros, en caso no seas así, deberás poner el nombre correcto de las columnas.

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ

    • Marcado como respuesta djnilo miércoles, 25 de marzo de 2015 15:40
    miércoles, 25 de marzo de 2015 15:21

Todas las respuestas

  • hola

    lo que aconsejaria es que en el INSERT definas los campos

    INSERT INTO detalle_cotizacion (campo1, campo2, ...) VALUES (Codigo_Producto,Cantidad,Descripcion,Precio,Total,Numero_Cotizacion);

    de esta form indicas que campos mapean con los parametros

    ademas el campo id de la tabla lo defines como IDENTITY para que se autoincremente el valor de forma secuencial ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP miércoles, 25 de marzo de 2015 15:20
    • Marcado como respuesta djnilo miércoles, 25 de marzo de 2015 15:40
    miércoles, 25 de marzo de 2015 15:19
  • Hola,

    No es un problema de sintaxis del lenguaje que ocupas sino de sql para tu gestor de base de datos.

    No se como va en MySql pero recomendaré bajo SQL Server que para el tema conceptual no debería haber diferencias. Es correcto que no envíes un valor para una columna auto-incrementable, pero deberías indicar explicitamente la lista de columnas y valores.

    BEGIN
    INSERT INTO detalle_cotizacion (Codigo_Producto,Cantidad,Descripcion,Precio,Total,Numero_Cotizacion) VALUES (Codigo_Producto,Cantidad,Descripcion,Precio,Total,Numero_Cotizacion);
    END

    Marco en negrita la definición del nombre de las columnas que asumo son iguales a los nombres de los parámetros, en caso no seas así, deberás poner el nombre correcto de las columnas.

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ

    • Marcado como respuesta djnilo miércoles, 25 de marzo de 2015 15:40
    miércoles, 25 de marzo de 2015 15:21
  • muchas gracias Willams Morales
    miércoles, 25 de marzo de 2015 15:40
  • muchas gracias Leandro Tuttini
    miércoles, 25 de marzo de 2015 15:41