none
Error en un ambiente de desarrollo (Specified cast is not valid.) RRS feed

  • Pregunta

  • Hola a todos, estoy desconcertado, resulta que desarrolle  un proyecto web y anduvo correctamente en mi maquina, lo probe y recontra probe y todo bien, cuando voy al servidor de desarrollo y lo quiero ejecutar me tira un error que no pude superar, aparentemente por lo que pude descifrar, el problema seria en un castin que hago.

    Les explico, tengo un membership personalizado, y tambien un User membership personalizado.

    En una pagina debo recuperar esa clase UsuarioPersonalizado y lo hago asi:

    Usuario u = (Usuario)Membership.GetUser(Page.User.Identity.Name, false);

    El error que tira es el siguiente, que la verdad para MI es un poco chino.

     

    Server Error in '/encuestasTaller' Application.

    Specified cast is not valid.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.InvalidCastException: Specified cast is not valid.

    Source Error:

    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.


    Stack Trace:

    [InvalidCastException: Specified cast is not valid.]
      System.Data.SqlClient.SqlBuffer.get_Int32() +5002837
      System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i) +38
      Piton.Usuario.CreateFromReader(SqlDataReader reader) in c:\users\ing.clemente\documents\visual studio 2010\Projects\piton\Piton\Piton.web\Pages\Usuario.cs:18
      Piton.web.Account.ExtendedMembershipProvider.GetUser(String username, Boolean userIsOnline) in C:\Users\Ing.Clemente\Documents\Visual Studio 2010\Projects\piton\Piton\Piton.web\Account\ExtendedMembershipProvider.cs:129
      System.Web.Security.Membership.GetUser(String username, Boolean userIsOnline) +63
      Piton.Pages.Preguntas.btTerminar_Click(Object sender, EventArgs e) in C:\Users\Ing.Clemente\Documents\Visual Studio 2010\Projects\piton\Piton\Piton.web\Pages\Preguntas.aspx.cs:47
      System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
      System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
      System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
      System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
      System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
      System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563
    

    Espero que puedan ayudarme porque estoy bastante desesperado, ya teniamos que publicar esto la semana pasadaa! :(

     

    Saludos a todos

    viernes, 8 de abril de 2011 23:10

Respuestas

  • lo que pasa es que el metodo GetUser() retorna un objeto tipo MembershipUser

    Sustituye

    Usuario u = (Usuario)Membership.GetUser(Page.User.Identity.Name, false);

    por esta

    MembershipUser u = (MembershipUser)Membership.GetUser(Page.User.Identity.Name, false);

    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    viernes, 8 de abril de 2011 23:47
  • hola

    veo que el problema esta aqui

    SqlDataReader.GetInt32

    o sea en algun punto esta queriendo convertir a int y por el tipo de dato que retorna no puede hacer

    veo ademas que esto se da dentro de

    Piton.Usuario.CreateFromReader()

    has analizado el codigo de esta clase ? agrega un try..catch alli y loguea el error

    valida dentro de CreateFromReader en que punto o con que campos estas queriendo convertir a int y en esos agrega validaciones para que en caso de no ser un valor entero el que le llegue no falle

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 8 de abril de 2011 23:48

Todas las respuestas

  • lo que pasa es que el metodo GetUser() retorna un objeto tipo MembershipUser

    Sustituye

    Usuario u = (Usuario)Membership.GetUser(Page.User.Identity.Name, false);

    por esta

    MembershipUser u = (MembershipUser)Membership.GetUser(Page.User.Identity.Name, false);

    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    viernes, 8 de abril de 2011 23:47
  • hola

    veo que el problema esta aqui

    SqlDataReader.GetInt32

    o sea en algun punto esta queriendo convertir a int y por el tipo de dato que retorna no puede hacer

    veo ademas que esto se da dentro de

    Piton.Usuario.CreateFromReader()

    has analizado el codigo de esta clase ? agrega un try..catch alli y loguea el error

    valida dentro de CreateFromReader en que punto o con que campos estas queriendo convertir a int y en esos agrega validaciones para que en caso de no ser un valor entero el que le llegue no falle

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 8 de abril de 2011 23:48
  • Gracias Leandro por tu respuesta, pero pregunto: no deberia dar ese error tambien en el entorno de desarrollo? porque lo hace solo en el entorno de Produccion!?... igual voy a chequear!

     

    sábado, 9 de abril de 2011 0:03
  • Hola Angel, el problema es qeu estoy usando un MembershipUser personalizado, en el pongo algunos valores que en el MembershipUser standar no estan.

    Me explico? gracias por tu respuesta...

    sábado, 9 de abril de 2011 0:06
  • porque segun veo es un problema de datos, si los datos difieren en cada entorno puede manifestarse solo en uno de ellos

    por ahi si un campo permites nulos en el entorno de desarollo todos tiene valores entocnes no falla, pero en el de produccion alguien dejo un campo con el nulo, no lo controlaste en tu codigo y bueno ahi esta el error, que solo se da en produccion

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    sábado, 9 de abril de 2011 0:41
  • Hola, Afirmativamente Leandro, otra vez haz dado en la tecla, el tema era que en la base de produccion tenia un campo que era BigInt, y en la de desarrollo uno Int, y en el proceso dentro del createFromReader habia un GetInt32(), por ende fallaba, solo lo cambie por un GetInt64 y anduvo a la perfeccion.

    Saludos y gracias por tu tiempo.

    lunes, 11 de abril de 2011 20:24