none
Error. La conversión especificada no es válida. RRS feed

  • Pregunta

  • Hola

    tengo la siguiente linea de código

    m_decValorOrdenCompra = m_dtableOC.AsEnumerable().Sum(r => (r.Field<decimal>("CantidadPedida") * r.Field<decimal>("Precio")) - r.Field<decimal>("CantidadNoRecibida"));

    cuando pongo el punto de interrupcion para ver el datatable  (m_dtableOC) me aparece que hay datos

    incluso cantidadNoRecibida esta en CERO!

    no entiendo porque sale Error. La conversión especificada no es válida.

    miércoles, 29 de noviembre de 2017 15:10

Respuestas

  • hola

    Pero el campo CantidadNoRecibida si estas permitiendo nulos, quizas sea este el campo que causa el problema

    en la imagen validas que Precio y CantidadPedida, pero te olvidas que usas otro campos

    que pasa si para probar quitas el CantidadNoRecibida  que restas para ver si sigue fallando? si no falla entonces es ese campo el que causa problemas en la conversion de tipos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP miércoles, 29 de noviembre de 2017 16:34
    • Marcado como respuesta greg_dorian miércoles, 29 de noviembre de 2017 17:03
    miércoles, 29 de noviembre de 2017 16:32

Todas las respuestas

  • Buenas,

    En visual studio 2017 ya salta un aviso de que no puede inferir el tipo desde el que hacer la conversion

    Una posible solucion a esto, es utilizar un datatable tipado, es decir, cuyas columnas tengan tipo, si estas definiendo tu el datatable:

    DataTable m_dtableOC = new DataTable();
    m_dtableOC.Columns.Add("CantidadPedida",typeof(decimal));
    m_dtableOC.Columns.Add("Precio", typeof(decimal));
    m_dtableOC.Columns.Add("CantidadNoRecibida", typeof(decimal));


    Con ese cambio, ya no existe el problema para hacer el cast.

    Otra opcion que tienes, si no puedes o no quieres tipar las columnas, usar la clase Convert en vez de usar casteos

    decimal m_decValorOrdenCompra = m_dtableOC.AsEnumerable().Sum(r => (Convert.ToDecimal(r["CantidadPedida"]) * Convert.ToDecimal(r["Precio"])) - Convert.ToDecimal(r["CantidadNoRecibida"]));

    Esa segunda opcion tampoco da error

    Prueba y nos comentas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:


    • Editado Jorge TurradoMVP miércoles, 29 de noviembre de 2017 15:41
    • Propuesto como respuesta Ramiro Ledesma miércoles, 29 de noviembre de 2017 15:48
    miércoles, 29 de noviembre de 2017 15:39
  • Toma cuidado cuando "tipas", mediante el método Field<T>, los valores de las columnas, por ejemplo, ¿estás seguro que la columna 'CantidadPedida' es de tipo decimal?, por lo que veo, en la imagen que adjuntas, se trata de un tipo entero, en consecuencia la definición del tipo debería ser: 'r.Field<int>("CantidadPedida")', de igual manera con la columna 'CantidadNoRecibida'.

    miércoles, 29 de noviembre de 2017 15:45
  • Toma cuidado cuando "tipas", mediante el método Field<T>, los valores de las columnas, por ejemplo, ¿estás seguro que la columna 'CantidadPedida' es de tipo decimal?, por lo que veo, en la imagen que adjuntas, se trata de un tipo entero, en consecuencia la definición del tipo debería ser: 'r.Field<int>("CantidadPedida")', de igual manera con la columna 'CantidadNoRecibida'.

    hola William todas son Decimal (ver imagen) es posible porque estén permitir Nullos ("Allow Nulls")

    porque para que no me saque este error llevo el valor a cero en ves que sea null

    if (row["CantidadRecibida"] == DBNull.Value)
             row["CantidadRecibida"] = 0.00m;


    miércoles, 29 de noviembre de 2017 15:55
  • Buenas, 

    Si justo antes de la linea que da el error de conversión, pones esto:

    string tipoA = dt.Columns["CantidadPedida"].DataType.ToString();
    string tipoB = dt.Columns["Precio"].DataType.ToString();
    string tipoC = dt.Columns["CantidadNoRecibida"].DataType.ToString();

    los tres tipos son System.Decimal?

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    miércoles, 29 de noviembre de 2017 16:01
  • hola

    Pero el campo CantidadNoRecibida si estas permitiendo nulos, quizas sea este el campo que causa el problema

    en la imagen validas que Precio y CantidadPedida, pero te olvidas que usas otro campos

    que pasa si para probar quitas el CantidadNoRecibida  que restas para ver si sigue fallando? si no falla entonces es ese campo el que causa problemas en la conversion de tipos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP miércoles, 29 de noviembre de 2017 16:34
    • Marcado como respuesta greg_dorian miércoles, 29 de noviembre de 2017 17:03
    miércoles, 29 de noviembre de 2017 16:32
  • hola

    Pero el campo CantidadNoRecibida si estas permitiendo nulos, quizas sea este el campo que causa el problema

    en la imagen validas que Precio y CantidadPedida, pero te olvidas que usas otro campos

    que pasa si para probar quitas el CantidadNoRecibida  que restas para ver si sigue fallando? si no falla entonces es ese campo el que causa problemas en la conversion de tipos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    si leandro esa variable era la que venia en nulo

    miércoles, 29 de noviembre de 2017 17:04