Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе приведены примеры кода, демонстрирующие способы использования объектов ошибок, предоставленных поставщиком данных 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