Condividi tramite


Errori ADO Run-Time

Gli errori ADO vengono segnalati al programma come errori di runtime. È possibile usare il meccanismo di intercettazione degli errori del linguaggio di programmazione per intercettare e gestirli. Ad esempio, in Visual Basic, utilizzare l'istruzione On Error. In Visual C++, dipende dal metodo usato per accedere alle librerie ADO. Con #import, utilizzare un blocco try-catch. In caso contrario, i programmatori C++ devono recuperare in modo esplicito l'oggetto errore chiamando GetErrorInfo. La seguente subroutine di Visual Basic dimostra come intercettare 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 Form_Load routine evento crea intenzionalmente un errore tentando di aprire lo stesso oggetto Connection due volte. La seconda volta che viene chiamato il metodo Open, viene attivato il gestore degli errori. In questo caso l'errore è di tipo adErrObjectOpen, quindi il gestore 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 ogni informazione fornita dall'oggetto Err di Visual Basic, ad eccezione del valore LastDLLError, che non si applica qui. Il numero di errore indica l'errore che si è verificato. La descrizione è utile nei casi in cui non si vuole gestire manualmente l'errore. È sufficiente passarlo all'utente. Anche se in genere si vogliono usare messaggi personalizzati per l'applicazione, non è possibile prevedere ogni errore; la descrizione fornisce qualche indizio su ciò che è andato storto. Nel codice di esempio l'errore è stato segnalato dall'oggetto Connection. Qui verrà visualizzato il tipo o l'ID programmatico dell'oggetto, non un nome di variabile.

Nota

L'oggetto Err di Visual Basic contiene solo informazioni sull'errore più recente. L'insieme 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 ulteriori informazioni sulla raccolta Errors, vedere Provider Errors. Tuttavia, se non è presente 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 un Connection o Recordset, il tentativo di aggiornare i dati o chiamare un metodo o una proprietà non supportata dal provider.

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

Nell'argomento seguente vengono fornite altre informazioni sugli errori ADO.