none
INSERTAR REGISTRO EN MYSQL TIPO DE DATO DECIMAL DESDE C#

    Question

  • Buenas tardes a las personas del foro

    Mi problema es que he intentado usar el tipo de dato decimal tanto en c# y en mysql pero siempre me salta el mismo error: " e = {"Out of range value for column 'ART_COS_VEN1' at row 1"} " ahora no tengo ni idea de porque supuestamente me he excedido del limite del tipo de dato porque lo hace igual ya sea el numero 1 entero y un decimal:

    ESTE ES EL PROCEDIMIENTO ALMACENADO QUE USO:

    CREATE DEFINER=`root`@`localhost` PROCEDURE `INSERT_ARTICULO`(
    OUT SECUENCIA INT,
    CATSEC INT,
    ARTCOD VARCHAR(20),
    ARTSTO INT,
    ARTNOM VARCHAR(100),
    ARTCOD_COM VARCHAR(20),
    ARTCOS_COM DECIMAL,
    ARTCOS_VEN1 DECIMAL,
    ARTCOS_VEN2 DECIMAL,
    ARTCOS_VEN3 DECIMAL,
    ARTNUM_SER VARCHAR(20),
    ARTFEC_EXP DATETIME,
    ARTTIP VARCHAR(10),
    ARTIMG LONGBLOB
    )
    BEGIN
    INSERT INTO  ARTICULO(
    CAT_SEC,
    ART_COD,
    ART_STO,
    ART_NOM,
    ART_COD_COM,
    ART_COS_COM,
    ART_COS_VEN1,
    ART_COS_VEN2,
    ART_COS_VEN3,
    ART_NUM_SER ,
    ART_FEC_EXP ,
    ART_TIP,
    ART_IMG
    ) VALUES(
    CATSEC ,
    ARTCOD ,
    ARTSTO ,
    ARTNOM ,
    ARTCOD_COM ,
    ARTCOS_COM ,
    ARTCOS_VEN1 ,
    ARTCOS_VEN2 ,
    ARTCOS_VEN3 ,
    ARTNUM_SER ,
    ARTFEC_EXP ,
    ARTTIP ,
    ARTIMG
    );
    SET SECUENCIA=(SELECT MAX(ART_SEC) FROM ARTICULO);
    END

    Y ESTE ES EL METODO QUE UTILIZO PARA HACER EL INSERT DESDE C#:

    MySqlParameter[] param = new MySqlParameter[14];
                    param[0] = new MySqlParameter("SECUENCIA", MySqlDbType.Int32);
                    param[0].Direction = ParameterDirection.Output;
                    param[1] = new MySqlParameter("CATSEC", MySqlDbType.Int32);
                    param[1].Value = cat; 
                    param[2] = new MySqlParameter("ARTCOD", MySqlDbType.VarChar);
                    param[2].Value = cod; 
                    param[3] = new MySqlParameter("ARTSTO", MySqlDbType.Int32);
                    param[3].Value = stock;
                    param[4] = new MySqlParameter("ARTNOM", MySqlDbType.VarChar,200);
                    param[4].Value = nombre;
                    param[5] = new MySqlParameter("ARTCOD_COM", MySqlDbType.VarChar,20);
                    param[5].Value = " ";
                    param[6] = new MySqlParameter("ARTCOS_COM", MySqlDbType.Decimal);
                    param[6].Value = valorCosto; 
                    param[7] = new MySqlParameter("ARTCOS_VEN1", MySqlDbType.Decimal);
                    param[7].Value = valorVenta1;
                    param[8] = new MySqlParameter("ARTCOS_VEN2", MySqlDbType.Decimal);
                    param[8].Value = valorVenta2; 
                    param[9] = new MySqlParameter("ARTCOS_VEN3", MySqlDbType.Decimal);
                    param[9].Value = valorVenta3; 
                    param[10] = new MySqlParameter("ARTNUM_SER", MySqlDbType.VarChar);
                    param[10].Value = numSerie; 
                    param[11] = new MySqlParameter("ARTFEC_EXP", MySqlDbType.DateTime);
                    param[11].Value = fechaExpira; 
                    param[12] = new MySqlParameter("ARTTIP", MySqlDbType.VarChar,10);
                    param[12].Value = tipo;
                    param[13] = new MySqlParameter("ARTIMG", MySqlDbType.LongBlob);
                    param[13].Value = img;

                    ConexionBD.abrirConexion();
                    HelperMySql.ExecuteNonQuery(ConexionBD.sqlConn, CommandType.StoredProcedure, "INSERT_ARTICULO", param);
                    ConexionBD.cerrarConexion();
                    return Convert.ToInt32(param[0].Value.ToString());

    LES AGRADECERIA MUCHO ME DEN UNA MANO QUE YA ME VOY HA ALOCAR 

    SALUDOS

    Wednesday, December 05, 2012 10:30 PM

Answers

  • SALUDOS LEANDRO PERO MI INCONVENIENTE PUDE YA RESOLVER, EL PROBLEMA ESTABA EN EL SP EN LA SIGUIENTE PARTE:

    ARTCOS_COM DECIMAL,
    ARTCOS_VEN1 DECIMAL,
    ARTCOS_VEN2 DECIMAL,
    ARTCOS_VEN3 DECIMAL,

    YA REALIZADO EL CAMBIO:

    ARTCOS_COM DECIMAL(4,2),
    ARTCOS_VEN1 DECIMAL(4,2),
    ARTCOS_VEN2 DECIMAL(4,2),
    ARTCOS_VEN3 DECIMAL(4,2,

    DONDE FUNCIONA DE MARAVILLA, CABE ACOTAR QUE ES UN PROBLEMA MUY COMUN, EN QUE ALGUNOS QUE ESTAMOS USANDO MYSQL CAEMOS, GRACIAS.

    ME PARECE MUY INTERESANTE EL FORO ESTARE MAS SEGUIDO POR AQUI, SI PUEDO DANDO UNA MANO TAMBIEN.

    • Marked as answer by JaimeJhon82red Thursday, December 06, 2012 2:18 PM
    Thursday, December 06, 2012 2:07 PM

All replies

  • has validado que el tipo de dato sea el correcto? o sea cuando haces

    param[6] = new MySqlParameter("ARTCOS_COM", MySqlDbType.Decimal);
     param[6].Value = valorCosto;

    validas que valorCosto sea una variable del tipo decimal ?

    que precision le asignas a la columna ?


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Wednesday, December 05, 2012 11:33 PM
  • Claro que si Leandro, valorCosto es de tipo struct System.Decimal, y con respecto a la precision he intentado con lo siguiente:

    param[6] = new MySqlParameter("ARTCOS_COM", MySqlDbType.Decimal);
    param[6].Value = valorCosto;

    param[6].Precision= 11;  (que seria 3 en decimal el valor de números enteros antes de la coma)

    param[6].Sacale= 10;  (que seria 2 en decimal, el valor de los números decimales después de la coma)

    Pero después de este cambio igual me salta la misma excepción, la verdad me parece un error de tipo de dato de mysql, pero no lo puedo resolver, talvez una idea.

    Thursday, December 06, 2012 1:28 AM
  • estaba viendo mejor el mensaje de error

    Out of range value for column 'ART_COS_VEN1' at row 1

    y noto que hace refeencia a uan colsumna en concreto

    la columna anterior tambien es decimal, pero no marca ningun problema, que valor le asignas a "ARTCOS_COM" ?

    ademas no veo que esto referencie a un problema con el tipo de dato sino mas bien con alguna resticcion en el tamaño del valor que asignas, de casualidad ese campo en la tabla no tiene ninguna limitante, no?

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Thursday, December 06, 2012 8:02 AM
  • SALUDOS LEANDRO PERO MI INCONVENIENTE PUDE YA RESOLVER, EL PROBLEMA ESTABA EN EL SP EN LA SIGUIENTE PARTE:

    ARTCOS_COM DECIMAL,
    ARTCOS_VEN1 DECIMAL,
    ARTCOS_VEN2 DECIMAL,
    ARTCOS_VEN3 DECIMAL,

    YA REALIZADO EL CAMBIO:

    ARTCOS_COM DECIMAL(4,2),
    ARTCOS_VEN1 DECIMAL(4,2),
    ARTCOS_VEN2 DECIMAL(4,2),
    ARTCOS_VEN3 DECIMAL(4,2,

    DONDE FUNCIONA DE MARAVILLA, CABE ACOTAR QUE ES UN PROBLEMA MUY COMUN, EN QUE ALGUNOS QUE ESTAMOS USANDO MYSQL CAEMOS, GRACIAS.

    ME PARECE MUY INTERESANTE EL FORO ESTARE MAS SEGUIDO POR AQUI, SI PUEDO DANDO UNA MANO TAMBIEN.

    • Marked as answer by JaimeJhon82red Thursday, December 06, 2012 2:18 PM
    Thursday, December 06, 2012 2:07 PM