VB.NET Actualización de Oracle Record EXECUSEnQuery Problema
-
27-10-2019 - |
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
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