Condividi tramite


Errori di run-time ADO

Gli errori ADO vengono segnalati al programma come errori di run-time. È possibile usare il meccanismo di intercettazione degli errori del linguaggio di programmazione per intercettarli e gestirli. Ad esempio, in Visual Basic usare l'istruzione On Error. In Visual C++ dipende dal metodo usato per accedere alle librerie ADO. Con #import, usare un blocco try-catch. In caso contrario, i programmatori C++ devono recuperare in modo esplicito l'oggetto errore chiamando GetErrorInfo. La procedura secondaria seguente di Visual Basic illustra l'intercettazione di un errore ADO:

' BeginErrorHandlingVB01
Private Sub Form_Load()
' Turn on error handling
On Error GoTo FormLoadError

'Open the database and the recordset for processing.
'
Dim strCnn As String
strCnn = "Provider=sqloledb;" & _
    "Data Source=a-iresmi2000;" & _
    "Initial Catalog=Northwind;Integrated Security=SSPI"

' cnn is a Public Connection Object because
' it was defined WithEvents
Set cnn = New ADODB.Connection
cnn.Open strCnn

' The next line of code intentionally causes
' an error by trying to open a connection
' that has already been opened.
cnn.Open strCnn

' rst is a Public Recordset because it
' was defined WithEvents
Set rst = New ADODB.Recordset
rst.Open "Customers", cnn

Exit Sub

' Error handler
FormLoadError:
    Dim strErr As String
    Select Case Err
        Case adErrObjectOpen
            strErr = "Error #" & Err.Number & ": " & Err.Description & vbCrLf
            strErr = strErr & "Error reported by: " & Err.Source & vbCrLf
            strErr = strErr & "Help File: " & Err.HelpFile & vbCrLf
            strErr = strErr & "Topic ID: " & Err.HelpContext
            MsgBox strErr
            Debug.Print strErr
            Err.Clear
            Resume Next
        ' If some other error occurs that
        ' has nothing to do with ADO, show
        ' the number and description and exit.
        Case Else
            strErr = "Error #" & Err.Number & ": " & Err.Description & vbCrLf
            MsgBox strErr
            Debug.Print strErr
            Unload Me
    End Select
End Sub
' EndErrorHandlingVB01

Questa routine dell'evento Form_Load crea intenzionalmente un errore provando ad aprire due volte lo stesso oggetto Connection. La seconda volta che viene chiamato il metodo Open, si attiva il gestore degli errori. In questo caso l'errore è di tipo adErrObjectOpen, quindi il gestore degli errori visualizza il messaggio seguente prima di riprendere l'esecuzione del programma:

Error #3705: Operation is not allowed when the object is open.
Error reported by: ADODB.Connection
Help File: E:\WINNT\HELP\ADO260.CHM Topic ID: 1003705

Il messaggio di errore include tutte le informazioni fornite dall'oggetto Visual Basic Err, ad eccezione del valore LastDLLError, che non si applica qui. Il numero di errore indica quale errore si è verificato. La descrizione è utile nei casi in cui non si vuole gestire l'errore in modo autonomo. È sufficiente passarlo all'utente. Anche se in genere si vuole usare i messaggi personalizzati per l'applicazione, non è possibile prevedere ogni errore; la descrizione fornisce qualche indizio sul problema. Nel codice di esempio l'errore è stato segnalato dall'oggetto Connection. Qui verrà visualizzato il tipo dell'oggetto o l'ID programmatico, non un nome di variabile.

Nota

L'oggetto Visual Basic Err contiene solo informazioni sull'errore più recente. La raccolta ADO Errors dell'oggetto Connection contiene un oggetto Error per ogni errore generato dall'operazione ADO più recente. Usare la raccolta Errors anziché l'oggetto Err per gestire più errori. Per altre informazioni sulla raccolta Errors, vedere Errori del provider. Tuttavia, se non esiste alcun oggetto Connection valido, l'oggetto Err è l'unica origine per informazioni sugli errori ADO.

Quali tipi di operazioni possono causare errori ADO? Gli errori ADO comuni possono comportare l'apertura di un oggetto, ad esempio una Connessione o un Recordset, il tentativo di aggiornare i dati o la chiamata a un metodo o una proprietà non supportati dal provider.

Gli errori OLE DB possono anche essere passati all'applicazione come errori di run-time nella raccolta Errors.

L'argomento seguente offre altre informazioni sugli errori ADO.