none
Error en inicio de la propiedad "commandText" RRS feed

  • Pregunta

  • Hola a todos:

    Tengo un error que a priori no entiendo porqué se produce, el mismo afecta a SqlCompact 4.0. Dicho error con Access 2007 y SqlServer Express no se produce.

    El error de inicio de la propiedad "CommandText" se produce en la línea marcada en negrita.

     Public Function ExisteArchivoLicencia() As Boolean
            Return System.IO.File.Exists(Ruta("lic"))
        End Function
    
        Public Function Ruta(ByVal strExtension As String) As String
            Dim strSinExtension As String = My.Computer.FileSystem.CombinePath(My.Application.Info.DirectoryPath, My.Application.Info.AssemblyName)
            Return String.Concat(strSinExtension, ".", strExtension)
        End Function

    En error para directamente a la función que me marca el error:

       Public Shared Function ExecuteAction(ByVal cmd As DbCommand) As Integer   '//Esta función es para ejecutar consultas de acción: INSERT, UPDATE, DELETE o de definición de datos: CREATE TABLE, DROP TABLE, etc.
            ' Creamos el acceso a datos mediante el nombre de la cadena de conexión existente en el archivo de configuración de la aplicación.
            Dim da As DataAccessInvariant = DataAccessInvariant.GetDataAccessInvariant(Configuracion.CadenaConexion)
    
            'Comprobación del parámetro
            If (cmd Is Nothing) Then Throw New ArgumentNullException("cmd")
    
            Try
                Using cnn As DbConnection = da.CreateConnection()
                    'Le asignamos la conexión al objeto Command
                    cmd.Connection = cnn
                    'Abrimos la conexión
                    cnn.Open()
                    'Ejectuamos el comando devolviendo si procede el número de registros afectados.
    
                    Return cmd.ExecuteNonQuery
                End Using
    
            Catch ex As Exception
                'Devolvemos el error al procedimiento llamador
                Throw
            End Try
        End Function

    Ahí en "Throw" salta el mensaje citado.

    En principio no entiendo porqué pasa por esa función ya que no la estoy llamando y es por ahí done voy perdida.

    Bueno, a ver si vosotros, sabios por naturaleza veis algo que desgraciadita de mi no veo.

    Un saludo a todos.

    Gemma



    miércoles, 15 de junio de 2016 5:27

Respuestas

  • Casi seguro que el error ocurre porque estás llamando a esa subrutina pasándole un DbCommand al que no le has metido nada en la propiedad CommandText, y por eso da un error al ejecutarlo.

    Utiliza el debugger de Visual Studio, y utiliza el Stack Trace cuando te dé el error (es una ventanita que aparece en la parte de abajo, si no lo encuentras se puede activar desde uno de los menús, puede que sea View o Debug). Ahí verás desde dónde se le hizo la llamada a esa subrutina, y con un doble-click saltará a ese punto del código fuente donde podrás ver cuál es el cmd que se le pasa y cómo se ha inicializado.

    • Marcado como respuesta gemma_campillo miércoles, 15 de junio de 2016 5:56
    miércoles, 15 de junio de 2016 5:35

Todas las respuestas

  • Casi seguro que el error ocurre porque estás llamando a esa subrutina pasándole un DbCommand al que no le has metido nada en la propiedad CommandText, y por eso da un error al ejecutarlo.

    Utiliza el debugger de Visual Studio, y utiliza el Stack Trace cuando te dé el error (es una ventanita que aparece en la parte de abajo, si no lo encuentras se puede activar desde uno de los menús, puede que sea View o Debug). Ahí verás desde dónde se le hizo la llamada a esa subrutina, y con un doble-click saltará a ese punto del código fuente donde podrás ver cuál es el cmd que se le pasa y cómo se ha inicializado.

    • Marcado como respuesta gemma_campillo miércoles, 15 de junio de 2016 5:56
    miércoles, 15 de junio de 2016 5:35
  • > Public Shared Function ExecuteAction(ByVal cmd As DbCommand) As Integer
    >
    >    Try
    >
    >    Catch ex As Exception
    >        'Devolvemos el error al procedimiento llamador
    >        Throw
    >    End Try
    >
    > End Function

    Buenos días, Gemma:

    A parte de lo comentado por Alberto, te comento que no tiene ningún sentido encerrar el código entre un bloque Try ... Catch ... End Try que ejecutas en la función ExecuteAction, si tu intención es devolver al procedimiento llamador la misma excepción que se ha producido, porque entonces estarías DUPLICANDO la generación de la excepción: una la que realmente se produce y otra la que tú generas mediante la instrucción Throw, lo que lleva su tiempo; con la primera es más que suficiente:

        Public Shared Function ExecuteAction(ByVal cmd As DbCommand) As Integer
    
            ' Esta función es para ejecutar consultas de acción: INSERT,
            ' UPDATE, DELETE o de definición de datos: CREATE TABLE, DROP TABLE, etc.
            ' Creamos el acceso a datos mediante el nombre de la cadena de
            ' conexión existente en el archivo de configuración de la aplicación.
            '
            ' Comprobación del parámetro
            If (cmd Is Nothing) Then Throw New ArgumentNullException("cmd")
    
            Dim da As DataAccessInvariant = DataAccessInvariant.GetDataAccessInvariant(Configuracion.CadenaConexion)
            
    Dim n As Integer
    Using cnn As DbConnection = da.CreateConnection() 'Le asignamos la conexión al objeto Command cmd.Connection = cnn 'Abrimos la conexión cnn.Open() 'Ejectuamos el comando n = cmd.ExecuteNonQuery End Using
    ' Devolvemos el número de registros afectados.
    Return n
    End Function

    Diferente sería que capturaras la excepción y lanzaras otra diferente a la que realmente se ha producido, pero como no es el caso, está de más el Try ... Catch ... End Try en la función ExecuteAction, porque donde tienes que insertar dicho bloque es en aquel procedimiento que llama a ExecuteAction.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    miércoles, 15 de junio de 2016 5:50
    Moderador
  • Hola querido Alberto, buenos días.

    Voy a hacer lo que me has indicado, que desconocía lo del Stack Trace. Pero si no me aclaro con que esas rutina son al inicio del Submain, voy a ir pasando una por una, pero es raro que con las otras bases de datos no falle nada.

    Bueno, querido amigo un fuerte abrazo y muchas gracias como siempre. A ver si hay suerte.

    Gemma

    miércoles, 15 de junio de 2016 5:56
  • Hola Alberto:

    Ya lo he encontrado y no tiene nada que ver con esos procesos.

    Proviene de una backgroundWorker que hace una comprobación de si las tablas están creadas.

    Bueno, a seguir con ello.

    Gemma

    miércoles, 15 de junio de 2016 6:10