VB.net aggiornamento problema Oracle record di ExecuteNonQuery
-
27-10-2019 - |
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
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.