none
ERROR AL EJECUTAR CONSULTA SQL MUY LARGA RRS feed

  • Pregunta

  • Cordial saludo,

    les comento que tengo una función  a la cual le mando una cadena  con una consulta SQL a una base de datos Oracle y esta me devuelve  un datatable con los registros devueltos, el inconveniente es que al ejecutar un sql MUY largo  el  aplicativo se cierra y en el visual studio  aparece el siguiente log de error

    The thread 0x24f0 has exited with code 259 (0x103).
    The thread 0x1d74 has exited with code 259 (0x103).
    The thread 0x26a8 has exited with code 259 (0x103).

    The program '[9944] EEP_UNION_FACON_FAC_1-1.vshost.exe' has exited with code -1073740791 (0xc0000409). 

    el problema es que  al  ejecutarse el metodo fill del oracledataadapter  ocurre el error, copio la funcnion.

    Agradesco la ayuda

             datos.fill     Aqui se genera la excepcion pero no es capturada por el try catch 
    Public Function ejecutarSQL(ByVal sql As String, Optional ByVal mostrarMensaje As Boolean = True) As DataTable
    
            Dim tabla As New DataTable
            Try
                Dim con As OracleConnection = New OracleConnection()
                con.ConnectionString = "Data Source=xxxx.25.3.14;User Id=xxx;Password=xxxxxxxx"
    
                Dim ds As New DataSet()
                Dim datos As OracleDataAdapter = New OracleDataAdapter(sql, con)
                datos.Fill(ds)
                If ds.Tables.Count > 0 Then
                    tabla = ds.Tables(0)
                   Return tabla
                End If
    
                Return Nothing
            Catch ex As Exception
    
                If mostrarMensaje Then
                    MessageBox.Show("Error: " & ex.Message, "ERROR BD", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End If
    
                Return tabla
            End Try
    
        End Function




    • Editado ELKINDEV683 jueves, 30 de abril de 2015 13:41
    miércoles, 29 de abril de 2015 21:41

Todas las respuestas

  • Hola:

     Y este error solo ocurre cuando la consulta es muy larga?, cuantos registros devuelve tu consulta?, la consulta utiliza algún tipo de parámetro?, carácter especial?

    Nota: Cuando subas código trata de no proporcionar información sensible como el que contiene tu cadena de conexión, recuerda que millones de usuarios acuden a estos foros...


    Saludos desde Monterrey, Nuevo León, México!!!

    miércoles, 29 de abril de 2015 22:50
  • Hola,

    Gracias por responder, si esto solo pasa con esta consulta que  es muy larga estamos hablando de 542 lineas y 22979 caracteres no veo ningún parámetro o carácter especial raro, y lo complicado es que no se pude capturar la excepción.

    Gracias

    PD: Gracias por la observación de la nota, pero igual esa información no es real :D 

    jueves, 30 de abril de 2015 13:33
  • Hola:

     Y esta query funciona si la ejecutas dierectamente en el ambiente de Oracle?


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 30 de abril de 2015 14:32
  • si claro funciona al ejecutarlo en el sql developer  funciona
    jueves, 30 de abril de 2015 15:36
  • has pensado en pasar tantas lineas a un procedimiento almacenado de PL/Sql ?

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 30 de abril de 2015 16:39
  • Importantes es decirte que para maximizar el tiempo de repuesta en tu consulta o procedimiento almacenado tienes que agregar los campos necesarios que necesita que te muestre, esto como una buena practica, el connection string viene con un valor predeterminado para que el pueda traerte los datos cuando en ese tiempo no trae valores como es el caso te genera una excepción, pienso dos alternativas una en tu código el cual a continuación te modifico, lo que le agrego el Connection Timeout=0 esto significa sin limite de tiempo

    Oracle connection strings

    Public Function ejecutarSQL(ByVal sql As String, Optional ByVal mostrarMensaje As Boolean = True) As DataTable

           
    Dim tabla As New DataTable
           
    Try
               
    Dim con As OracleConnection = New OracleConnection()
                con
    .ConnectionString = "Data Source=xxxx.25.3.14;User Id=xxx;Password=xxxxxxxx;Connection Timeout=0"

               
    Dim ds As New DataSet()
               
    Dim datos As OracleDataAdapter = New OracleDataAdapter(sql, con)
                datos
    .Fill(ds)
               
    If ds.Tables.Count > 0 Then
                    tabla
    = ds.Tables(0)
                  
    Return tabla
               
    End If

               
    Return Nothing
           
    Catch ex As Exception

               
    If mostrarMensaje Then
                    MessageBox
    .Show("Error: " & ex.Message, "ERROR BD", MessageBoxButtons.OK, MessageBoxIcon.Error)
               
    End If

               
    Return tabla
           
    End Try

       
    End Function

    Otra recomendación seria utilizar paginación en Oracle para que no te traiga los datos de un solo.

    Slds


    ProgramacionYa.net
    Si pequeña es la Patria, uno grande la sueña
    Rubén Darío
    Principe de las letras Castellanas
    Poeta Nicaragüense

    • Propuesto como respuesta Sergio Parra martes, 31 de enero de 2017 8:14
    jueves, 30 de abril de 2015 19:16