Domanda

Ciao a tutti quando uso ROSPO per aggiornare una tabella di tutte le opere che bene quando si utilizza questa query:

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');

Tuttavia, una volta che provo a fare la stessa cosa nel mio programma VB.net utilizzando questo codice:

 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

Si rimane sul ra = OracleCommand.ExecuteNonQuery () in modo continuo fino a quando ottengo l'errore

Il CLR è stato in grado di transizione dal contesto COM 0x3327fa8 al contesto COM 0x3328118 per 60 secondi. Il filo che possiede il contesto di destinazione / appartamento è molto probabile che sia fare un'attesa non pompaggio o l'elaborazione di un'operazione molto lunga in esecuzione senza il pompaggio di messaggi di Windows. Questa situazione ha generalmente un impatto negativo sulle prestazioni e può anche comportare l'applicazione divenire uso non reattivo o memoria accumulando continuamente nel tempo. Per evitare questo problema, tutte le discussioni singolo appartamento filettato (STA) dovrebbero usare pompaggio primitive di attesa (come CoWaitForMultipleHandles) e di routine pompare messaggi durante le operazioni di lunga esecuzione.

Che cosa potevo fare per ottenere questo lavoro all'interno di VB.net poiché funziona bene in ROSPO quando si esegue la stessa domanda?

Grazie!

David

È stato utile?

Soluzione

si può anche disattivare che ContextSwitchDeadlock è stato rilevato eccezione:

Per evitare questi popup di errore da che appare, selezionare Eccezioni dalla menu debug da Visual Studio finestra e nella finestra di dialogo eccezioni selezionare Assistenti di debug Managed Eccezione Node. quindi selezionare ContextSwitchDeadlock e rimuovere la selezionare dalla colonna Gettato

http: // dotnetdud .blogspot.com / 2009/01 / CLR-è-stato-grado-di-passaggio-from.html

EDIT: Verificare la presenza di serrature

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;

Do atto dovrai capacità di vedere dba_objects così come v $ locked_object (tirato da questo qui )

e controllare questo articolo http://www.orafaq.com/node/854

Altri suggerimenti

appare come la query richiede molto tempo per l'esecuzione, in modo da l'interfaccia utente sta bloccando. La soluzione migliore sarebbe quella di eseguire questa query in un thread diverso, in modo da non bloccare l'interfaccia utente ... o ottimizzare la query in modo che corre più veloce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top