Partager via


Gestion des erreurs dans les applications managées (SQL Server Compact)

Cette rubrique contient des exemples de code qui indiquent comment utiliser les objets d'erreur du fournisseur de données pour SQL Server Compact 3.5. Vous pouvez utiliser ces objets pour capturer et afficher les erreurs du moteur qui se produisent dans SQL Server Compact 3.5 lors de l'exécution des méthodes des objets Replication, RemoteDataAccess ou Engine.

Objet SqlCeException

Lorsqu'une erreur du moteur se produit, un objet SqlCeException est créé. Cet objet d'exception contient l'objet SqlCeErrorCollection. Celui-ci contient à son tour une collection d'objets SqlCeError, à raison d'un par erreur dans l'exception. L'objet SqlCeErrorCollection est directement accessible par le biais de la propriété SqlCeException.Errors. Chaque objet SqlCeError contient un tableau de paramètres d'erreur qui décrivent l'erreur. À la différence de SQL Server, SQL Server Compact 3.5 renvoie des informations détaillées sur une erreur sous la forme d'une collection de paramètres. Lorsque vous générez des messages d'erreur, utilisez si possible une série de boucles FOR imbriquées pour extraire chaque paramètre de chaque objet SqlCeError de la collection.

Exemples

Dans l'exemple suivant, la méthode ShowSqlException intercepte une erreur d'exception du moteur SQL Server Compact 3.5. Cet objet SqlCeException est transmis à la méthode ShowErrors. Celle-ci affiche chacun des objets SSCEError contenus dans l'objet SqlCeErrorCollection. Cette méthode passe en revue tous les paramètres d'erreur de chaque erreur.

C#

// Reference the data provider.
using System.Data.SqlServerCe;

// Start the method to generate a database engine exception.
public void ShowSqlCeException() 
{
    string mySelectQuery = "SELECT column1 FROM table1";
    SqlCeConnection myConnection = new SqlCeConnection("Data Source=nonExistSource.sdf;");
    SqlCeCommand myCommand = new SqlCeCommand(mySelectQuery,myConnection);

    try 
    {
        myCommand.Connection.Open();
    }

    // Catch the exception as e and pass it to the ShowErrors routine.
    catch (SqlCeException e) 
    {
        ShowErrors(e);
    }

}

// Error handling routine that generates an error message
public static void ShowErrors(SqlCeException e) 
{
    SqlCeErrorCollection errorCollection = e.Errors;

    StringBuilder bld = new StringBuilder();
    Exception inner = e.InnerException;

    if (null != inner) 
    {
        MessageBox.Show("Inner Exception: " + inner.ToString());
    }
    // Enumerate the errors to a message box.
    foreach (SqlCeError err in errorCollection) 
    {
        bld.Append("\n Error Code: " + err.HResult.ToString("X")); 
        bld.Append("\n Message   : " + err.Message);
        bld.Append("\n Minor Err.: " + err.NativeError);
        bld.Append("\n Source    : " + err.Source);

        // Enumerate each numeric parameter for the error.
        foreach (int numPar in err.NumericErrorParameters) 
        {
            if (0 != numPar) bld.Append("\n Num. Par. : " + numPar);
        }

        // Enumerate each string parameter for the error.
        foreach (string errPar in err.ErrorParameters) 
        {
            if (String.Empty != errPar) bld.Append("\n Err. Par. : " + errPar);
        }

        MessageBox.Show(bld.ToString());
        bld.Remove(0, bld.Length);
    }
}

Visual Basic

' Reference the data provider by using the Imports directive.
Imports System.Data.SqlServerCe

' Start the method to generate a database engine exception.
Public Sub ShowSqlCeException()
    Dim mySelectQuery As String = "SELECT column1 FROM table1"
    Dim myConnection As New SqlCeConnection("Data Source=nonExistSource.sdf;")
    Dim myCommand As New SqlCeCommand(mySelectQuery, myConnection)

    Try
        myCommand.Connection.Open()

    ' Catch the exception as e and pass it to the ShowErrors routine.
    Catch e As SqlCeException

        ShowErrors(e)

    End Try
End Sub

' Error handling routine that generates an error message
Public Shared Sub ShowErrors(ByVal e As SqlCeException)
    Dim errorCollection As SqlCeErrorCollection = e.Errors

    Dim bld As New StringBuilder()
    Dim inner As Exception = e.InnerException

    If Not inner Is Nothing Then
        MessageBox.Show(("Inner Exception: " & inner.ToString()))
    End If

    Dim err As SqlCeError

    ' Enumerate each error to a message box.
    For Each err In errorCollection
        bld.Append((ControlChars.Cr & " Error Code: " & err.HResult.ToString("X")))
        bld.Append((ControlChars.Cr & " Message   : " & err.Message))
        bld.Append((ControlChars.Cr & " Minor Err.: " & err.NativeError))
        bld.Append((ControlChars.Cr & " Source    : " & err.Source))

        ' Retrieve the error parameter numbers for each error.
        Dim numPar As Integer
        For Each numPar In err.NumericErrorParameters
            If 0 <> numPar Then
                bld.Append((ControlChars.Cr & " Num. Par. : " & numPar))
            End If
        Next numPar

        ' Retrieve the error parameters for each error.
        Dim errPar As String
        For Each errPar In err.ErrorParameters
            If [String].Empty <> errPar Then
                bld.Append((ControlChars.Cr & " Err. Par. : " & errPar))
            End If
        Next errPar

        MessageBox.Show(bld.ToString())
        bld.Remove(0, bld.Length)
    Next err
End Sub

Voir aussi

Autres ressources

Création d'applications pour appareils de type « smart device » (SQL Server Compact)

Création d'applications pour les ordinateurs de bureau (SQL Server Compact)

Fournisseur de données managées (SQL Server Compact)

Gestion des erreurs dans les applications natives