Condividi tramite


Errori del provider

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

Raccolta Errors ADO

Poiché un'operazione ADO specifica può produrre più errori del provider, ADO espone una raccolta di oggetti errore tramite l'oggetto Connection. Questa raccolta non contiene oggetti se un'operazione termina correttamente e contiene uno o più oggetti Error se si è verificato un problema e il provider ha generato 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, UpdateBatch o CancelBatch in un oggetto Recordset, il metodo Open in un oggetto Connection o impostare la proprietà Filter in un oggetto Recordset. Cancellando in modo esplicito la raccolta, è possibile assicurarsi che nella raccolta non rimangano oggetti Error di un'operazione precedente.

Alcune operazioni possono generare avvisi oltre agli errori. Anche gli avvisi sono rappresentati dagli oggetti Error nella raccolta Errors. Quando un provider aggiunge un avviso nella raccolta, non genera un errore di runtime. Controllare la proprietà Count della raccolta Errors per determinare se è stato generato un avviso da un'operazione specifica. Se il conteggio è pari o superiore a uno, alla raccolta è stato aggiunto un oggetto Error. Non appena viene stabilito che la raccolta Errors contiene errori o avvisi, è possibile scorrere la raccolta e recuperare le informazioni su ogni oggetto Error in essa contenuto. Per una dimostrazione, vedere il breve esempio di Visual Basic seguente:

' 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 della raccolta Errors. In questo esempio accumula un messaggio per la visualizzazione. In un programma funzionante si scriverà il codice per eseguire un'attività appropriata per ogni errore come la chiusura di tutti i file aperti e l'arresto regolare del programma.

Oggetto Error

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

Nome proprietà Descrizione
Descrizione Descrizione di testo 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 Valore long integer che rappresenta il numero (elencato in ErrorValueEnum) dell'errore che si è verificato.
Origine 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 ADO Error è molto simile all'oggetto Visual Basic Err standard. Le proprietà descrivono l'errore che si è verificato. Oltre al numero dell'errore, sono riportate anche due informazioni correlate. La proprietà NativeError contiene un numero di errore specifico del provider usato. Nell'esempio precedente il provider è il provider Microsoft OLE DB per SQL Server, pertanto NativeError conterrà errori specifici di SQL Server. La proprietà SQLState ha un codice di cinque lettere che descrive un errore in un'istruzione SQL.

L'oggetto Error viene usato 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 dell'evento.

Se l'operazione che causa un evento viene completata correttamente, il parametro adStatus del gestore eventi verrà impostato su adStatusOK. Se invece 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.