none
Error Just-In-Time (JIT) RRS feed

  • Pregunta

  • Bueno pasa algo raro con mi aplicacion ya que no me marca ningun error, ya la eh isntalado en un equipo que tiene como sistema operativo el windows XP y hace las conexiones y todo correctamente el problema es al ingresar en un pantalla en la cual se hacen modificaciones si le dan guardar les marca el sisguiente error:

    Consulte el final de este mensaje para obtener más detalles sobre cómo invocar a la depuración
    Just-In-Time (JIT) en lugar de a este cuadro de diálogo.

    ************** Texto de la excepción **************

    System.FormatException: La cadena de entrada no tiene el formato correcto.
       en System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
       en System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
       en System.Int16.Parse(String s, NumberStyles style, NumberFormatInfo info)
       en System.Convert.ToInt16(String value)
       en WindowsFormsApplication1.ModifFrmUbicStock.GuardaInformacion()
       en WindowsFormsApplication1.ModifFrmUbicStock.ModifUBtnGuarda_Click(Object sender, EventArgs e)
       en System.Windows.Forms.Control.OnClick(EventArgs e)
       en System.Windows.Forms.Button.OnClick(EventArgs e)
       en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       en System.Windows.Forms.Control.WndProc(Message& m)
       en System.Windows.Forms.ButtonBase.WndProc(Message& m)
       en System.Windows.Forms.Button.WndProc(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    ************** Ensamblados cargados **************
    mscorlib
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 (RTMRel.030319-0100)
        Código base: file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
    ----------------------------------------
    Generar Inventarios
        Versión del ensamblado: 1.0.0.0
        Versión Win32: 1.0.0.0
        Código base: file:///C:/Documents%20and%20Settings/farmacias.FARMACIAS/Configuraci%F3n%20local/Apps/2.0/GLR90468.K34/N81TYLBA.XX9/gene..tion_c043ef732d5c691d_0001.0000_2f625bc89a960b93/Generar%20Inventarios.exe
    ----------------------------------------
    System.Windows.Forms
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 built by: RTMRel
        Código base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System.Drawing
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 built by: RTMRel
        Código base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    System
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 built by: RTMRel
        Código base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Data
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 (RTMRel.030319-0100)
        Código base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
    ----------------------------------------
    System.Core
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 built by: RTMRel
        Código base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
    ----------------------------------------
    System.Configuration
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 (RTMRel.030319-0100)
        Código base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
    ----------------------------------------
    System.Xml
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 built by: RTMRel
        Código base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    System.Transactions
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 (RTMRel.030319-0100)
        Código base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.Transactions/v4.0_4.0.0.0__b77a5c561934e089/System.Transactions.dll
    ----------------------------------------
    System.EnterpriseServices
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 (RTMRel.030319-0100)
        Código base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.EnterpriseServices/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
    ----------------------------------------
    System.Windows.Forms.resources
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 built by: RTMRel
        Código base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_es_b77a5c561934e089/System.Windows.Forms.resources.dll
    ----------------------------------------
    System.Numerics
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 built by: RTMRel
        Código base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
    ----------------------------------------
    mscorlib.resources
        Versión del ensamblado: 4.0.0.0
        Versión Win32: 4.0.30319.1 (RTMRel.030319-0100)
        Código base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_es_b77a5c561934e089/mscorlib.resources.dll
    ----------------------------------------

    ************** Depuración JIT **************
    Para habilitar la depuración Just In Time (JIT), el archivo de configuración de esta
    aplicación o equipo (machine.config) debe tener el
    valor jitDebugging establecido en la sección system.windows.forms.
    La aplicación también se debe compilar con la depuración
    habilitada

    Por ejemplo:

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>

    Cuando esté habilitada la depuración JIT, cualquier excepción no controlada
    se enviará al depurador JIT registrado en el equipo
    en lugar de controlarlo mediante el cuadro de diálogo.

    Ya he revisado mi codigo y creo yo que no es por hay el error mire esta liga

    http://social.msdn.microsoft.com/Forums/es-ES/vbes/thread/23380991-25fe-4e65-b826-5536629036e6

    y dice algo sobre poner en true el JIT pero no dice como alguien sabe algo sobre esto o si miran algun error que yo no capte sobre la exepcion nose si sea mi codigo o permisos o algo???


    Ing.Mario Alberto Moreno Navarro

    sábado, 2 de junio de 2012 17:47

Respuestas

  • No te líes con los temas del JIT y todo el texto de la excepción. La clave está en la primera línea:

    "System.FormatException: La cadena de entrada no tiene el formato correcto en System.Number.StringToNumber".

    Esencialmente te dice que has intentado convertir a numérico un texto que no se reconoce como un número (tal como "Z12A3"). Esto indica un error de programación, por ejemplo, puede que tengas un textbox en pantalla en el que se supone que el usuario teclea un número, y luego lo grabas en un campo numérico. Si lo que te teclean no es un número (por ejemplo, si lo dejan en blanco), se produce un error cuando el programa trata de meter ese texto dentro del campo numérico. El remedio es ejecutar el programa con el debugger en Visual Studio, con lo que al producirse el error se te parará la ejecución en la línea que hace la conversión, y desde ahí puedes examinar los valores de las variables o la traza de pila para ver cómo has llegado hasta ahi.

    En todo caso, es un error de programación en la parte cliente, y no en el servidor SQL, por lo que si no consigues determinar con el debugger la causa del error sugiero que replantees la pregunta en uno de los foros de programación, en lugar de este foro de SQL Server.

    domingo, 3 de junio de 2012 7:37
  • Efectivamente, la conversión de una caja de texto a int16 puede arrojar el error que estás viendo en el caso de que el contenido de la caja de texto no sea un número.

    Te sugiero que hagas la conversión mediante el método int16.TryParse, que realiza la conversión si puede, y te devuelve true o false según que haya tenido éxito o no. En caso de que te devuelva false, puedes informar al usuario que el dato que ha tecleado no es correcto, y no grabar en la base de datos.

    lunes, 4 de junio de 2012 16:17
  • Depende de lo bueno que sea tu filtrado del TextBox. Incluso aunque solo aceptes números, y rechaces cualquier otro tipo de carácter, si por ejemplo te teclean "99999" entonces el Convert.ToInt16 dará un error, porque es un número mayor que lo que "cabe" en un Int16. Igualmente, si te dejan el textbox en blanco también se producirá un error al tratar de convertirlo a Int16.

    lunes, 4 de junio de 2012 18:27
  • Con un int16 puedes llegar hasta 32767 (o sea que 9999 sí que funciona, pero 99999 no). Si necesitas cifras más grandes, puedes usar un Int32, que llega hasta dos mil millones aproximadamente. Pero piensa que no basta con ampliar el tamaño del número en memoria; si luego lo vas a grabar en base de datos, hace falta que el tipo de dato usado en el servidor sea también lo bastante largo para admitir los valores que planeas introducirle. Con un SMALLINT en el servidor, puedes guardar un Int16. Con un INT, puedes guardar un Int32.

    lunes, 4 de junio de 2012 20:19

Todas las respuestas

  • No te líes con los temas del JIT y todo el texto de la excepción. La clave está en la primera línea:

    "System.FormatException: La cadena de entrada no tiene el formato correcto en System.Number.StringToNumber".

    Esencialmente te dice que has intentado convertir a numérico un texto que no se reconoce como un número (tal como "Z12A3"). Esto indica un error de programación, por ejemplo, puede que tengas un textbox en pantalla en el que se supone que el usuario teclea un número, y luego lo grabas en un campo numérico. Si lo que te teclean no es un número (por ejemplo, si lo dejan en blanco), se produce un error cuando el programa trata de meter ese texto dentro del campo numérico. El remedio es ejecutar el programa con el debugger en Visual Studio, con lo que al producirse el error se te parará la ejecución en la línea que hace la conversión, y desde ahí puedes examinar los valores de las variables o la traza de pila para ver cómo has llegado hasta ahi.

    En todo caso, es un error de programación en la parte cliente, y no en el servidor SQL, por lo que si no consigues determinar con el debugger la causa del error sugiero que replantees la pregunta en uno de los foros de programación, en lugar de este foro de SQL Server.

    domingo, 3 de junio de 2012 7:37
  • Bueno eh rebisado lo que me comentas y al parecer era una cajade texto en la cual escribia un numero.tostring  lo mandaba asi a al bd convirtiendolo a int16, noce si esta sea la causa?

    Ing.Mario Alberto Moreno Navarro

    lunes, 4 de junio de 2012 15:29
  • Efectivamente, la conversión de una caja de texto a int16 puede arrojar el error que estás viendo en el caso de que el contenido de la caja de texto no sea un número.

    Te sugiero que hagas la conversión mediante el método int16.TryParse, que realiza la conversión si puede, y te devuelve true o false según que haya tenido éxito o no. En caso de que te devuelva false, puedes informar al usuario que el dato que ha tecleado no es correcto, y no grabar en la base de datos.

    lunes, 4 de junio de 2012 16:17
  • ESQUE IO LO ESTABA PONIENDO DIRECTO OSEA LO ENVIABA A SI ALA BD NUMERO.TEXT, PERO AHORA LO ENVIO ASI CONVERT.TOINT16(NUMERO.TEXT) AHORA QUE ME COMENTAS QUE AUN ASI MARCARIA ERROR M UNA VEZ QUE LO MODIFIQUE IA NO MARCO EL ERROR, A LO QUE ME MENCIONAS DE LOS ESPACIOS Y ESO TENGO UN PROCEDIMIENTO QUE SOLO ACEPTA NUMEROS NO ESPACIOS,NO NADA DE ESE TIPO DE COSAS, PERO ENTONCES CREES QUE SI LO DEJO COMO CONVERT.TOINT16(NUMERO.TEXT) ME VA A SEGIR MARCANDO ERROR?

    Ing.Mario Alberto Moreno Navarro

    lunes, 4 de junio de 2012 16:24
  • Depende de lo bueno que sea tu filtrado del TextBox. Incluso aunque solo aceptes números, y rechaces cualquier otro tipo de carácter, si por ejemplo te teclean "99999" entonces el Convert.ToInt16 dará un error, porque es un número mayor que lo que "cabe" en un Int16. Igualmente, si te dejan el textbox en blanco también se producirá un error al tratar de convertirlo a Int16.

    lunes, 4 de junio de 2012 18:27
  • ahh no contemple lo del 9999, referente alo del blanco no pemito que avancen sin antes haber lelnado algo io le boy mas a que ocurra erro por el 9999 tons deberia de hacer un int32?

    Ing.Mario Alberto Moreno Navarro

    lunes, 4 de junio de 2012 20:05
  • Con un int16 puedes llegar hasta 32767 (o sea que 9999 sí que funciona, pero 99999 no). Si necesitas cifras más grandes, puedes usar un Int32, que llega hasta dos mil millones aproximadamente. Pero piensa que no basta con ampliar el tamaño del número en memoria; si luego lo vas a grabar en base de datos, hace falta que el tipo de dato usado en el servidor sea también lo bastante largo para admitir los valores que planeas introducirle. Con un SMALLINT en el servidor, puedes guardar un Int16. Con un INT, puedes guardar un Int32.

    lunes, 4 de junio de 2012 20:19