none
No se estableció ningún texto de comando.... RRS feed

  • Pregunta

  • Hola a todos:

    Tengo un datagridview que al querer grabarlo en la tabla me está dando el error típioco "No se estableció ningún texto de comando para el objeto comando".

    Le estoy dando vueltas y no veo aparentemente el porqué salta la excepción, ya que el comando existe.

    Este es el código del proceso de grabación:

    Public Shared Function ActualizarDatosDatagridActivoNetoReal(codEmpresa As String, dt As DataTable) As Integer
    
            If (dt Is Nothing) Then
                Throw New ArgumentNullException("dt")
            End If
    
            ' 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)
    
            ' Declaramos una variable Connection
            Using cnn As DbConnection = da.CreateConnection()
    
                ' Creamos el Commando
                Dim cmd As DbCommand = cnn.CreateCommand()
    
                cnn.Open()
    
                ' Especificamos la consulta SQL de selección
    
                cmd.CommandText = "SELECT IdBalance, Cod_Empresa, Descripcion, ValorContable, Amortizacion, Deterioro, ValorNeto, Plusvalia, Minusvalia, ValorReal " &
                                  "FROM BalSitExpl "
    
                ' Actualizamos el origen de datos devolviendo
                ' el número de registros afectados.
                '
                Return MetodosDatos.UpdateData(cmd, dt)
    
            End Using
    
        End Function

    y este es el procedimiento UpdateData que realiza la actualización de los datos:

      Public Shared Function UpdateData(selectCommand As DbCommand, dt As DataTable) As Integer
    
            If (selectCommand Is Nothing) Then _
                Throw New ArgumentNullException("selectCommand")
    
            If (dt Is Nothing) Then _
                Throw New ArgumentNullException("dt")
    
            '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)
    
            ' Declaramos una variable Connection
            Using cnn As DbConnection = da.CreateConnection()
    
                ' Creamos el Commando
                Dim cmd As DbCommand = cnn.CreateCommand
    
                cnn.Open()
    
                selectCommand.Connection = cnn
    
                ' Creamos el adaptador de datos.
                Dim adaptador As DbDataAdapter = da.CreateDataAdapter()
                adaptador.SelectCommand = cmd
    
                ' Agrega información sobre la clave principal para completar el esquema.
                adaptador.MissingSchemaAction = MissingSchemaAction.AddWithKey
    
                ' Creamos un objeto CommandBuilder par actualizar los datos
                Dim cmdBuilder As DbCommandBuilder = da.CreateCommandBuilder()
    
                ' Le asignamos el objeto DataAdapter creado anteriormente.
                cmdBuilder.DataAdapter = adaptador
    
                ' Configuramos la propiedad UpdateCommand del adaptador de datos.
                adaptador.UpdateCommand = cmdBuilder.GetUpdateCommand()
    
                ' Añadimos los caracteres para encerrar los nombres de los campos entre corchetes.
                cmdBuilder.QuotePrefix = "["
                cmdBuilder.QuoteSuffix = "]"
    
                With adaptador
                    '.InsertCommand = cb.GetInsertCommand()
                    .UpdateCommand = cmdBuilder.GetUpdateCommand()
                    '.DeleteCommand = cb.GetDeleteCommand()
                End With
    
                'Dim n As Integer = da.Update(dt)
                'MsgBox("Nº de registros afectados: " & n)
    
                ' Actualizamos el origen de datos.
                Return adaptador.Update(dt)
    
            End Using
    
        End Function

    El error salta cuando crea la propiedad UpdateCommand del adaptador. (en negrita)

    Bueno, a ver si alguien ve algo que se me escapa y no lo veo.

    Un saludo a todos.

    Gemma

    miércoles, 1 de junio de 2016 6:36

Respuestas

  • "gemma_campillo" escribió:

    > Tengo un datagridview que al querer grabarlo en la tabla me está
    > dando el error típioco "No se estableció ningún texto de comando
    > para el objeto comando".
    >
    > y este es el procedimiento UpdateData que realiza la actualización de los datos:
    >
    > Public Shared Function UpdateData(selectCommand As DbCommand, dt As DataTable) As Integer

    Gemma, observa la firma de la función UpdateData, donde el primer parámetro es del tipo DbCommand, que se supone contiene el comando que deseas ejecutar. Y en el cuerpo de dicha función declaras la siguiente variable:

        ' Creamos el Commando
        Dim cmd As DbCommand = cnn.CreateCommand

    Que es la que le asignas al adaptador de datos:

        adaptador.SelectCommand = cmd

    por tanto, es normal que obtengas el mensaje de error que estás teniendo, porque esa variable del tipo DbCommand no le has definido ninguna consulta SQL a su propiedad CommandText.

    A la propiedad SelectCommand del adaptador de datos tienes que asignarle el objeto DbCommand que recibe el primer parámetro de la función UpdateData:

        adaptador.SelectCommand = selectCommand

    Por tanto, sobra la declaración

        ' Creamos el Commando
        ' Dim cmd As DbCommand = cnn.CreateCommand


    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, 1 de junio de 2016 6:50
    Moderador

Todas las respuestas

  • "gemma_campillo" escribió:

    > Tengo un datagridview que al querer grabarlo en la tabla me está
    > dando el error típioco "No se estableció ningún texto de comando
    > para el objeto comando".
    >
    > y este es el procedimiento UpdateData que realiza la actualización de los datos:
    >
    > Public Shared Function UpdateData(selectCommand As DbCommand, dt As DataTable) As Integer

    Gemma, observa la firma de la función UpdateData, donde el primer parámetro es del tipo DbCommand, que se supone contiene el comando que deseas ejecutar. Y en el cuerpo de dicha función declaras la siguiente variable:

        ' Creamos el Commando
        Dim cmd As DbCommand = cnn.CreateCommand

    Que es la que le asignas al adaptador de datos:

        adaptador.SelectCommand = cmd

    por tanto, es normal que obtengas el mensaje de error que estás teniendo, porque esa variable del tipo DbCommand no le has definido ninguna consulta SQL a su propiedad CommandText.

    A la propiedad SelectCommand del adaptador de datos tienes que asignarle el objeto DbCommand que recibe el primer parámetro de la función UpdateData:

        adaptador.SelectCommand = selectCommand

    Por tanto, sobra la declaración

        ' Creamos el Commando
        ' Dim cmd As DbCommand = cnn.CreateCommand


    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, 1 de junio de 2016 6:50
    Moderador
  • Hola Enrique:

    Gracias otra vez, llevaba desde hacía rato resiguiendo el código y nada.

    Bueno, efectivamente y como siempre ese era mi error, no lo había visto.

    Maestro, gracias matinales otra vez como siempre. Eres como mi angel de la guarda-

    Bueno, un fuerte abrazo querido amigo.

    Gemma

    miércoles, 1 de junio de 2016 6:56
  • "gemma_campillo" escribió:

    > Eres como mi angel de la guarda-

    ¡Sí! Pero no te olvides de cerrar la pregunta. :-))


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


    miércoles, 1 de junio de 2016 7:00
    Moderador
  • Vale, se he había escapado.

    Un abrazo maestro.

    Gemma

    miércoles, 1 de junio de 2016 7:12