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.