none
ERROR No se puede convertir un objeto de tipo 'System.Data.DataTable' al tipo 'System.IAsyncResult'

    Pregunta

  • TENGO UN TEXTBOX... UN COMBO Y UN BOTON

    TENGO HECHO EL DATASET, PERO OCUPO FILTRAR ESTE REPORTE...

      Dim dt As New DataTable
            Dim dts As New SqlCommand

            dt.Clear()
            Conexion.Open()
            Dim almacen As New SqlClient.SqlCommand
            almacen = New SqlClient.SqlCommand("select ID_Alumno,Asignatura, N_CasaPP,N_ClasePP,ExamenPP,NivelacionPP,(N_CasaPP + N_ClasePP + ExamenPP + NivelacionPP) as Total, N_CasaSP,N_ClaseSP,ExamenSP, (N_CasaSP + N_ClaseSP + ExamenSP) as TotalSP, PR,SR  from Notas_Carrerawhere ID_Alumno='" & txtID.Text & "' and Anio='" & cboAño.Text & "'", Conexion)
            almacen.EndExecuteNonQuery(dt)
            Dim reporte As New reporte1

            If dt.Rows.Count = 0 Then
                MsgBox("No existe Alumno con Estas Caracteristicas", MsgBoxStyle.Critical)
                txtID.Clear()
                txtID.Focus()
            Else
                MsgBox("Reporte En Procese, Presione Aceptar")
                reporte.Refresh()
                visor_de_notas.CrystalReportViewer1.ReportSource = reporte
                visor_de_notas.CrystalReportViewer1.Refresh()
                visor_de_notas.Show()
            End If
            Conexion.close()
    • Editado luis12035 martes, 25 de octubre de 2016 17:05
    martes, 25 de octubre de 2016 16:58

Respuestas

  • Hola luis12035,

    Hay varios errores que tendrías que mejorar, tales como :

    • La consulta tiene errores de espacio 'Notas_Carrerawhere'.
    • No deberías de concatenar los parámetros directamente.
    • El uso del EndExecuteNonQuery el cual te produce el error que detallas, inclusive el Intellisense muestra el tipo requerido.
    • Si solo quieres obtener los datos de una consulta bastaría con usar solamente el SqlDataAdapter.

    Podrías hacer estas modificaciones :

    Public Sub filtrarReporte()
        Try
            Using con As New SqlConnection("MiCadenaConexion")
                Dim query = "select ID_Alumno, Asignatura, N_CasaPP, N_ClasePP, ExamenPP, " &
                    "NivelacionPP, (N_CasaPP + N_ClasePP + ExamenPP + NivelacionPP) As Total, " &
                    "N_CasaSP, N_ClaseSP, ExamenSP, (N_CasaSP + N_ClaseSP + ExamenSP) as TotalSP, " &
                    "PR, SR FROM Notas_Carrera where ID_Alumno = @id and Anio = @anio"
                Dim da As New SqlDataAdapter(query, con)
                da.SelectCommand.Parameters.AddWithValue("@id", txtID.Text)
                da.SelectCommand.Parameters.AddWithValue("@anio", cboAño.Text)
    
                Dim dt As New DataTable
                'Cargas el resultado al DataTable
                da.Fill(dt)
    
                'Si hay datos
                If dt.Rows.Count > 0 Then
                    'Crea la instancia del reporte..
                    Dim reporte As New reporte1
    
                    'Demás código....
                Else
                    MsgBox("No existe Alumno con Estas Caracteristicas", MsgBoxStyle.Critical)
                End If
    
            End Using
        Catch ex As Exception
            MessageBox.Show("Error : " & ex.Message)
        End Try
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 25 de octubre de 2016 17:36

Todas las respuestas

  • Hola luis12035,

    Hay varios errores que tendrías que mejorar, tales como :

    • La consulta tiene errores de espacio 'Notas_Carrerawhere'.
    • No deberías de concatenar los parámetros directamente.
    • El uso del EndExecuteNonQuery el cual te produce el error que detallas, inclusive el Intellisense muestra el tipo requerido.
    • Si solo quieres obtener los datos de una consulta bastaría con usar solamente el SqlDataAdapter.

    Podrías hacer estas modificaciones :

    Public Sub filtrarReporte()
        Try
            Using con As New SqlConnection("MiCadenaConexion")
                Dim query = "select ID_Alumno, Asignatura, N_CasaPP, N_ClasePP, ExamenPP, " &
                    "NivelacionPP, (N_CasaPP + N_ClasePP + ExamenPP + NivelacionPP) As Total, " &
                    "N_CasaSP, N_ClaseSP, ExamenSP, (N_CasaSP + N_ClaseSP + ExamenSP) as TotalSP, " &
                    "PR, SR FROM Notas_Carrera where ID_Alumno = @id and Anio = @anio"
                Dim da As New SqlDataAdapter(query, con)
                da.SelectCommand.Parameters.AddWithValue("@id", txtID.Text)
                da.SelectCommand.Parameters.AddWithValue("@anio", cboAño.Text)
    
                Dim dt As New DataTable
                'Cargas el resultado al DataTable
                da.Fill(dt)
    
                'Si hay datos
                If dt.Rows.Count > 0 Then
                    'Crea la instancia del reporte..
                    Dim reporte As New reporte1
    
                    'Demás código....
                Else
                    MsgBox("No existe Alumno con Estas Caracteristicas", MsgBoxStyle.Critical)
                End If
    
            End Using
        Catch ex As Exception
            MessageBox.Show("Error : " & ex.Message)
        End Try
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 25 de octubre de 2016 17:36
  • Hola! Joel C.Naupa Crispín

    Mira el Codigo lo puse asi! (nose si me equivoque en algo)

    Public Sub filtrarReporte()
            Try
                Using con As New SqlConnection("Data Source=MANUEL;Initial Catalog=Sistema;Integrated Security=True")
                    Dim query = "select ID_Alumno, Asignatura, N_CasaPP, N_ClasePP, ExamenPP, " &
                        "NivelacionPP, (N_CasaPP + N_ClasePP + ExamenPP + NivelacionPP) As Total, " &
                        "N_CasaSP, N_ClaseSP, ExamenSP, (N_CasaSP + N_ClaseSP + ExamenSP) as TotalSP, " &
                        "PR, SR FROM Notas_Carrera where ID_Alumno = @id and Anio = @anio"
                    Dim da As New SqlDataAdapter(query, con)
                    da.SelectCommand.Parameters.AddWithValue("@id", txtID.Text)
                    da.SelectCommand.Parameters.AddWithValue("@anio", cboAño.Text)

                    Dim dt As New DataTable
                    'Cargas el resultado al DataTable
                    da.Fill(dt)

                    'Si hay datos
                    If dt.Rows.Count > 0 Then
                        'Crea la instancia del reporte..
                        Dim reporte As New reporte1

                        MsgBox("Reporte En Procese, Presione Aceptar")
                        reporte.Refresh()
                        visor_de_notas.CrystalReportViewer1.ReportSource = reporte
                        visor_de_notas.CrystalReportViewer1.Refresh()
                        visor_de_notas.Show()
                    Else
                        MsgBox("No existe Alumno con Estas Caracteristicas", MsgBoxStyle.Critical)
                    End If

                End Using
            Catch ex As Exception
                MessageBox.Show("Error : " & ex.Message)
            End Try
        End Sub

    en el boton Generar

     filtrarReporte()

    El detalle es que me muestra el reporte! GENERAL, pero ocupo filtrarlo, ademas se tarda un minuto en buscar, nose que pasa...

    O tambien se me ocurrio que el reporte tiene algo que ver! al momento de hacerlo! 

    Agradecere mucho tu ayuda! SALUDOS

    martes, 25 de octubre de 2016 19:26
  • Hola luis12035,

    Ahora que analizo el código, veo que nunca usas el DataTable. La última vez que los llamas es para validar si hay filas o no.

    If dt.Rows.Count > 0 Then
    
        MsgBox("Reporte En Procese, Presione Aceptar")
    
        Dim reporte As New reporte1
        reporte.SetDataSource(dt) '<---Asigna el dt
    
        Dim vdn As New visor_de_notas
        vdn.CrystalReportViewer1.ReportSource = reporte
        vdn.CrystalReportViewer1.Refresh()
    
        visor_de_notas.Show()
    Else

    Además, visor_de_notas es un formulario ? Sería conveniente que crees una nueva instancia para visualizarla.

    [-] ... ademas se tarda un minuto en buscar, nose que pasa...

    Tienes una gran cantidad de datos ?

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 25 de octubre de 2016 19:49
  • Si, Visor de notas, es un formulario donde esta el CrystalreportViewer... 

    tengo un error raro

    Error 1 Dos nombres de archivo de salida se resolvieron en la misma ruta de acceso de salida: "obj\x86\Debug\Sistema.Form3.resources" Sistema

    Nose si se trata de que se a duplicado el archivo...

    la tabla solo tiene 3 registros, pero ya no tarda mucho.

    martes, 25 de octubre de 2016 20:04
  • Hola luis12035,

    Haz agregado un archivo de recursos ? Prueba limpiando y volviendo a generar la solución.

    Adjunto un hilo donde se plantea una pregunta similar.

    Error de compilación

    [-] .... Si, Visor de notas, es un formulario donde esta el CrystalreportViewer... 

    Ese formulario lo utilizas solo para la visualizacion de Reportes ? Si es así podrías agregar un constructor que recibe un ReportDocument y un DataTable, así podrías reutilizarlo y mostrar 'n' reportes.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 25 de octubre de 2016 20:31
  • Ya lo probe Gracias! Por todo Solo era un error en el DataSet

    Gracias SALUDOS

    miércoles, 26 de octubre de 2016 14:05