sábado, 12 de julio de 2014

ASP.NET, errores típicos con Visual Studio

Cuando un principiante comienza a porgramar con ASP.NET con Visual Studio suele quedarse atascado en errores que son típicos y fácilmente solucionables. Mi objetivo es hacer una pequeña lista de estos errores (al menos los más famosos) para tenerlos mas o menos reunidos y así permitir una curva de aprendizaje más rápida para quien comience a desarrollar con asp.net con Visual Studio.
Normalmente después de hacer varias modificaciones en el código, ejecutamos y obtenemos un error bastante desconcertante.

1º Compilation error:


Error típico de ASP

Aunque en principio desconcierta , este es el típico error que se resuelve haciendo CleanSolution y después Build Solution

clean solution y build solution

Hecho esto, si no sale ningún error de compilación,  nuestro programa se deberá ejecutar sin problemas.

2º NullreferenceException was unhandled by user code


Nos dice que la referencia del objeto no está establecida como una instancia del objeto.

Object reference not set to an instance of an object

En nuestro caso este error da con el siguiente código fuente, en la línea en negrita:

FirmasNacional.Firmas = FirmasArray
FirmasInternacional.Firmas = FirmasArray

El código está definido del siguiente modo:

Definición de la propiedad privada FirmasArray

Private ReadOnly Property FirmasArray() As DataAccess.Firma()
            Get
                If IsNothing(mFirmasArray) Then
                    mFirmasArray = DataAccess.CargarFirmas()
                End If
                Return mFirmasArray
            End Get
End Property

Definición de la propiedad pública Firmas

Public Property Firmas() As DataAccess.Firma()
      Get
         If IsNothing(mFirmas) Then Return mFirmasVacias
         Return mFirmas
      End Get
      Set(ByVal Value As DataAccess.Firma())
          mFirmas = Value
      End Set
End Property

Definición de FirmasNacional

#Region "Controles"
Protected FirmasOrdenComision As  CustomControl.SelectorFirma
Protected FirmasNacional As CustomControl.SelectorFirma  
Protected FirmasInternacional As  CustomControl.SelectorFirma
#End Region

Se soluciona poniendo delante el operador New

#Region "Controles"
Protected FirmasOrdenComision As New CustomControl.SelectorFirma
Protected FirmasNacional As New CustomControl.SelectorFirma           Protected FirmasInternacional As New CustomControl.SelectorFirma
#End Region

3º SqlNullValueException was unhandled by user code


Data is Null. This method or property cannot be called on Null values.

Data is Null. This method or property cannot be called on null values

Esta pantalla de error se muestra cuando el código ejecuta la linea pintada de rojo. Falla por que viene el valor a Null.

Private Function MostrarDatos(ByRef objclsDatos As clsDatos) As Boolean

Dim objListItem As System.Web.UI.WebControls.ListItem
Dim strAux As String

lblNif.InnerText = clsUtilidades.QuitarFormatoNIF(clsTools.UserFormat(objclsDatos.NIF, "", clsTools.TypeDataCode.Data_String))

txtNombre.Value = Trim(CType(objclsDatos.Nombre.Value, String))

Se soluciona añadiendo  If Not objclsDatos.Nombre.IsNull Then
Se ha remarcado en negrita.

Private Function MostrarDatos(ByRef objclsDatos As clsDatos) As Boolean

Dim objListItem As System.Web.UI.WebControls.ListItem
Dim strAux As String

lblNif.InnerText = clsUtilidades.QuitarFormatoNIF(clsTools.UserFormat(objclsTercero.NIF, "", clsTools.TypeDataCode.Data_String))

If Not objclsDatos.Nombre.IsNull Then
txtNombreYApellidos.Value = Trim(CType(objclsDatos.Nombre.Value, String))
End If

4º AmbiguousMacthException was unhanled by user code


No se pudo llevar a cabo la resolución de sobrecarga porque no se puede llamar a ningún Public 'op_Implicit' sin una conversión de restricción:

    'Public Shared Widening Operator CType(x As System.Data.SqlTypes.SqlByte) As System.Data.SqlTypes.SqlInt16':

        El parámetro 'x' correspondiente al argumento se reduce de 'Integer' a 'SqlByte'.
    'Public Shared Widening Operator CType(x As Short) As System.Data.SqlTypes.SqlInt16':
        El parámetro 'x' correspondiente al argumento se reduce de 'Integer' a 'Short'.

El parámetro X correspondiente al argumento se reduce de integer a Short

Para evitar este tipo de errores es importante poner option string a true al principio  del módulo para que los errores de compilación salten en modo de diseño y no en ejecución.
Abajo lo que había, y después lo que resuelve el problema.
objValue = objValue.op_Implicit(objValueIfIsNull)

Se resuelve previniendo que objValueIfIsNull no venga a nothing ni a cero.

If (objValueIfIsNull <> 0) Or (objValueIfIsNull IsNot Nothing) Or (objValueIfIsNull <> "") Then
       objValue = objValue.op_Implicit(objValueIfIsNull)
End If

5º Unable to cast COM object of type ‘’ to interface type ‘’. This operation failed because the QueryInterface call on the COM component for the interface with IID ‘’ failed due to the following error: No such interface suporrted.

Unable to cast COM object of type

Se trata de  un problema de permisos del IIS en vez de Network service debe ir con Local System


propiedades del framework en IIS


poner local system en el IIS

Distributed COM users

Distributed COM users




No hay comentarios:

Publicar un comentario