Freigeben über


Behandeln von Fehlern in verwalteten Anwendungen (SQL Server Compact)

In diesem Thema werden Codebeispiele bereitgestellt, die die Verwendung der Fehlerobjekte des Datenanbieters für SQL Server Compact 3.5 (SQL Server Compact 3.5) veranschaulichen. Mit diesen Objekten können Sie Modulfehler erfassen und anzeigen, die in SQL Server Compact 3.5 beim Ausführen von Methoden der Objekte Replication, RemoteDataAccess oder Engine auftreten.

"SqlCeException"-Objekt

Wenn ein Modulfehler auftritt, wird ein SqlCeException-Objekt erstellt. Dieses Ausnahmeobjekt enthält das SqlCeErrorCollection-Objekt. Dieses wiederum enthält eine Auflistung von SqlCeError-Objekten, und zwar eine Auflistung pro Ausnahmefehler. Das SqlCeErrorCollection-Objekt kann mit der SqlCeException.Errors-Eigenschaft direkt aufgerufen werden. Jedes SqlCeError-Objekt enthält ein Array von Fehlerparametern mit ausführlichen Informationen zum Fehler. Im Gegensatz zu SQL Server gibt SQL Server Compact 3.5 ausführliche Informationen zu einem Fehler als Auflistung von Parametern zurück. Beim Erstellen von Fehlermeldungen wird die Verwendung von geschachtelten FOR-Schleifen empfohlen, um alle Parameter in jedem SqlCeError-Objekt der Auflistung abzurufen.

Beispiele

Im folgenden Beispiel wird mit der ShowSqlException-Methode ein Ausnahmefehler des SQL Server Compact 3.5-Moduls erfasst. Dieses SqlCeException-Objekt wird an die ShowErrors-Methode übergeben. Hiermit werden alle SSCEError-Objekte im SqlCeErrorCollection-Objekt angezeigt. Mit dieser Methode wird ein Durchlauf durch alle Fehlerparameter für jeden Fehler ausgeführt.

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

Siehe auch

Verweis

Verwalteter Datenanbieter (SQL Server Compact)
Handhaben von Fehlern in systemeigenen Anwendungen

Konzepte

Erstellen von Anwendungen für intelligente Geräte (SQL Server Compact)
Erstellen von Anwendungen für Desktopcomputer (SQL Server Compact)

Hilfe und Informationen

Informationsquellen (SQL Server Compact 3.5 Service Pack 1)