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 veranschaulichen. Mit diesen Objekten können Sie Modulfehler erfassen und anzeigen, die in SQL Server Compact beim Ausführen von Engine-Objektmethoden 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 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-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 Desktopcomputer (SQL Server Compact)