Condividi tramite


Errori del provider

Quando si verifica un errore del provider, viene restituito un errore di runtime di -2147467259. Quando viene visualizzato questo errore, controllare l'insieme Errors dell'oggetto Connection attivo, che conterrà uno o più errori che descrivono ciò che si è verificato.

Raccolta di Errori ADO

Poiché una particolare operazione ADO può produrre più errori del provider, ADO espone una raccolta di oggetti di errore tramite l'oggetto Connection. Questa raccolta non contiene oggetti se un'operazione si conclude correttamente e contiene uno o più oggetti di errore se si è verificato un problema e il provider ha sollevato uno o più errori. Esaminare ogni oggetto errore per determinare la causa esatta dell'errore.

Non appena è stata completata la gestione degli errori che si sono verificati, è possibile cancellare la raccolta chiamando il metodo Clear. È particolarmente importante cancellare in modo esplicito la raccolta Errors prima di chiamare il metodo Resync, UpdateBatcho CancelBatch su un oggetto Recordset, il metodo Open su un oggetto Connection, oppure impostare la proprietà Filter su un oggetto Recordset. Cancellando in modo esplicito la raccolta, è possibile assicurarsi che eventuali oggetti di errore nella raccolta non siano lasciati da operazioni precedenti.

Alcune operazioni possono generare avvisi oltre agli errori. Gli avvisi sono rappresentati anche da oggetti Error nell'insieme Errors. Quando un provider aggiunge un avviso alla raccolta, non genera un errore di run-time. Controllare la proprietà Count della raccolta Errors per determinare se un avviso è stato generato da un'operazione specifica. Se il conteggio è uno o più, un oggetto Error è stato aggiunto all'insieme. Non appena si è determinato che l'insieme Errors contiene errori o avvisi, è possibile scorrere la raccolta e recuperare informazioni su ogni Error oggetto che contiene. Nell'esempio breve di Visual Basic seguente viene illustrato quanto segue:

' BeginErrorHandlingVB02  
Private Function DeleteCustomer(ByVal CompanyName As String) As Long  
    On Error GoTo DeleteCustomerError  
  
    rst.Find "CompanyName='" & CompanyName & "'"  
DeleteCustomerError:  
Dim objError As ADODB.Error  
Dim strError As String  
  
    If cnn.Errors.Count > 0 Then  
        For Each objError In cnn.Errors  
            strError = strError & "Error #" & objError.Number & _  
                " " & objError.Description & vbCrLf & _  
                "NativeError: " & objError.NativeError & vbCrLf & _  
                "SQLState: " & objError.SQLState & vbCrLf & _  
                "Reported by: " & objError.Source & vbCrLf & _  
                "Help file: " & objError.HelpFile & vbCrLf & _  
                "Help Context ID: " & objError.HelpContext  
        Next  
        MsgBox strError  
    End If  
End Function  
' EndErrorHandlingVB02  

La routine di gestione degli errori include un ciclo For Each che esamina ogni oggetto nella raccolta Errors. In questo esempio accumula un messaggio per la visualizzazione. In un programma funzionante è necessario scrivere codice per eseguire un'attività appropriata per ogni errore, ad esempio chiudere tutti i file aperti e arrestare il programma in modo ordinato.

Oggetto Errore

Esaminando un Error oggetto è possibile determinare l'errore che si è verificato e più importante, quale applicazione o quale oggetto ha causato l'errore. L'oggetto Error ha le proprietà seguenti:

Nome della proprietà Descrizione
Descrizione Descrizione testuale dell'errore che si è verificato.
HelpContext, HelpFile Fa riferimento all'argomento della Guida e al file della Guida che contengono una descrizione dell'errore che si è verificato.
NativeError Numero di errore specifico del provider.
numero Intero lungo che rappresenta il numero (elencato nel ErrorValueEnum) dell'errore che si è verificato.
fonte Indica il nome dell'oggetto o dell'applicazione che ha generato un errore.
SQLState Codice di errore di cinque caratteri restituito dal provider durante il processo di un'istruzione SQL.

L'oggetto Error di ADO è molto simile all'oggetto Err di Visual Basic standard. Le relative proprietà descrivono l'errore che si è verificato. Oltre al numero dell'errore, si ricevono anche due informazioni correlate. La proprietà NativeError contiene un numero di errore specifico per il provider in uso. Nell'esempio precedente il provider è il provider Microsoft OLE DB per SQL Server, quindi NativeError conterrà errori specifici di SQL Server. La proprietà SQLState contiene un codice di cinque lettere che descrive un errore in un'istruzione SQL.

L'oggetto Error viene utilizzato anche quando si verificano errori correlati agli eventi. È possibile determinare se si è verificato un errore nel processo che ha generato un evento ADO controllando l'oggetto Error passato come parametro di evento.

Se l'operazione che causa un evento viene completata correttamente, il parametro adStatus del gestore eventi verrà impostato su adStatusOK. D'altra parte, se l'operazione che ha generato l'evento non è riuscita, il parametro adStatus è impostato su adStatusErrorsOccurred. In tal caso, il parametro pError conterrà un oggetto Error che descrive l'errore.