Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примеры кода в этом разделе показывают, как пользоваться объектами ошибок, предоставляемыми поставщиком данных для SQL Server Compact 3.5. С помощью этих объектов можно перехватывать и отображать ошибки подсистемы, возникающие в SQL Server Compact 3.5 при выполнении методов объекта Replication, RemoteDataAccess или Engine.
Объект SqlCeException
При возникновении ошибки ядра СУБД создается объект SqlCeException. Этот объект исключения содержит объект SqlCeErrorCollection. В свою очередь, тот содержит коллекцию объектов SqlCeError, по одному на каждую ошибку в исключении. К объекту SqlCeErrorCollection можно обращаться напрямую с помощью SqlCeException.Errors. Каждый объект SqlCeError содержит массив параметров ошибки, предоставляющий подробные сведения об этой ошибке. В отличие от SQL Server, SQL Server Compact 3.5 возвращает подробные сведения об ошибке в виде коллекции параметров. При создании сообщений об ошибках рекомендуется использовать серию вложенных циклов FOR для извлечения каждого параметра в каждом объекте SqlCeError коллекции.
Примеры
В приведенном ниже примере метод ShowSqlException перехватывает ошибку исключения ядра СУБД SQL Server Compact 3.5. Объект SqlCeException передается в метод ShowErrors. При этом отображается каждый объект SSCEError в объекте SqlCeErrorCollection. Данный метод циклически обрабатывает все параметры каждой ошибки.
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
См. также
Другие ресурсы
Построение приложений для интеллектуальных устройств (SQL Server Compact)
Построение приложений для настольных компьютеров (SQL Server Compact)