Поделиться через


Использование объектов ошибок SQL Server Compact Edition

В этом разделе приведены примеры кода, демонстрирующие способы использования объектов ошибок, предоставленных поставщиком данных Microsoft .NET Compact Framework для SQL Server 2005 Compact Edition (SQL Server Compact Edition). С помощью этих объектов можно перехватывать и отображать ошибки ядра СУБД, возникающие в SQL Server Compact Edition при выполнении методов объекта Replication, RemoteDataAccess или Engine.

Объект SqlCeException

При возникновении ошибки ядра СУБД создается объект SqlCeException. Этот объект исключения содержит объект SqlCeErrorCollection. В свою очередь, тот содержит коллекцию объектов SqlCeError, по одному на каждую ошибку в исключении. К объекту SqlCeErrorCollection можно обращаться напрямую с помощью SqlCeException.Errors. Каждый объект SqlCeError содержит массив параметров ошибки, предоставляющий подробные сведения об этой ошибке. В отличие от SQL Server, SQL Server Compact Edition возвращает подробные сведения об ошибке в виде коллекции параметров. При создании сообщений об ошибках рекомендуется использовать серию вложенных циклов FOR для извлечения каждого параметра в каждом объекте SqlCeError коллекции.

Дополнительные сведения см. в разделе Программирование для SQL Server Compact Edition в среде .NET.

Примеры

В приведенном ниже примере метод ShowSqlException перехватывает ошибку исключения ядра СУБД SQL Server Compact Edition. Объект SqlCeException передается в метод ShowErrors. При этом отображается каждый объект SSCEError в объекте SqlCeErrorCollection. Данный метод циклически обрабатывает все параметры каждой ошибки.

C#

// Reference the .NET Compact Framework Data Provider for SQL Server Compact Edition.
using System.Data.SqlServerCe;

// Start the method to generate a SQL Server Compact Edition 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  .NET Compact Framework Data Provider for SQL Server Compact Edition by using the Imports directive.
Imports System.Data.SqlServerCe

' Start the method to generate a SQL Server Compact Edition 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

См. также

Справка и поддержка

Получение помощи по SQL Server Compact Edition