Pregunta

Hola, todo cuando uso Toad para actualizar una tabla funciona bien cuando usa esta consulta:

Update CSR.CSR_EAI_SOURCE ces 
        Set (STATUS_CODE, COMPLETE_DATE, DATA) =
            (SELECT 'ERROR', '', REPLACE(REPLACE(c.Data, '…', ' '), '’','''') 
             FROM CSR.CSR_EAI_SOURCE C
             WHERE c.EID = ces.EID
               AND c.STATUS_CODE = 'ERROR')
        WHERE EXISTS (SELECT 1
                       FROM CSR.CSR_EAI_SOURCE C
                       WHERE c.EID = ces.EID
                         AND c.STATUS_CODE = 'ERROR');

Sin embargo, una vez que intento hacer lo mismo en mi programa VB.NET usando este código:

 Dim OracleCommand As New OracleCommand()
 Dim ra As Integer

 OracleCommand = New OracleCommand("UPDATE   CSR.CSR_EAI_SOURCE ces " & _
                                      "SET      (STATUS_CODE, COMPLETE_DATE, DATA) = " & _
                                                "(SELECT    'ERROR', '', REPLACE(REPLACE(c.Data, '…', ' ' ), '’','''') " & _
                                                "FROM       CSR.CSR_EAI_SOURCE C " & _
                                                "WHERE      (c.EID = ces.EID) " & _
                                                "AND        c.STATUS_CODE = 'ERROR') " & _
                                      "WHERE    EXISTS (SELECT 1 " & _
                                      "FROM     CSR.CSR_EAI_SOURCE C " & _
                                      "WHERE    (c.EID = ces.EID) " & _
                                      "AND      c.STATUS_CODE = 'ERROR')", OracleConnection)

  Try
      ra = OracleCommand.ExecuteNonQuery()
      OracleConnection.Close()
      MsgBox("done")
  Catch ex As Exception
      MsgBox("ERROR: " & Err.Description & " " & Err.Number)
      OracleConnection.Close()
  End Try

Permanece en el RA = oraclecommand.executenQuery () continuamente hasta que reciba el error

El CLR no ha podido hacer la transición del contexto COM 0x3327fa8 al contexto COM 0x3328118 durante 60 segundos. El hilo que posee el contexto/apartamento de destino es probable que haga una espera que no sea bombeo o procese una operación de ejecución muy larga sin bombear mensajes de Windows. Esta situación generalmente tiene un impacto negativo en el rendimiento e incluso puede llevar a que la aplicación se vuelva no receptiva o el uso de la memoria que se acumule continuamente con el tiempo. Para evitar este problema, todos los hilos de apartamento de un solo rostro (STA) deben usar primitivas de espera de bombeo (como CowaitFormultipleHandles) y bombear mensajes de manera rutinaria durante las operaciones de larga duración.

¿Qué podría hacer para que esto funcione dentro de VB.NET, ya que funciona bien en Toad cuando ejecuta esa misma consulta?

¡Gracias!

David

¿Fue útil?

Solución

También puede apagar que contextSwitchdeadlock fue detectado excepción:

Para evitar que aparezcan estas ventanas emergentes de error, seleccione excepciones en el menú de depuración desde la ventana Visual Studio y en el cuadro de diálogo Excepción Seleccione el nodo de excepción de asistentes de depuración administrados. Luego seleccione contextwitchdeadlock y elimine la selección de la columna lanzada

de http://dotnetdud.blogspot.com/2009/01/clr-has-been-unable-to-pransition-from.html

EDITAR: Verifique las cerraduras

SELECT LPAD(' ',DECODE(l.xidusn,0,3,0)) || l.oracle_username "User Name",
o.owner, o.object_name, o.object_type
FROM v$locked_object l, dba_objects o
WHERE l.object_id = o.object_id
ORDER BY o.object_id, 1 desc;

Tenga en cuenta que necesitará la capacidad de ver DBA_Objects, así como V $ Locked_Object (extraí esto de aquí)

Y mira este artículohttp://www.orafaq.com/node/854

Otros consejos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top