SqlException Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wyjątek zgłaszany podczas SQL Server zwraca ostrzeżenie lub błąd. Klasa ta nie może być dziedziczona.
public ref class SqlException sealed : SystemException
public ref class SqlException sealed : System::Data::Common::DbException
[System.Serializable]
public sealed class SqlException : SystemException
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
[<System.Serializable>]
type SqlException = class
inherit SystemException
[<System.Serializable>]
type SqlException = class
inherit DbException
Public NotInheritable Class SqlException
Inherits SystemException
Public NotInheritable Class SqlException
Inherits DbException
- Dziedziczenie
- Dziedziczenie
- Atrybuty
Przykłady
Poniższy przykład generuje element , SqlException a następnie wyświetla wyjątek.
public static void ShowSqlException(string connectionString)
{
string queryString = "EXECUTE NonExistantStoredProcedure";
StringBuilder errorMessages = new StringBuilder();
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
try
{
command.Connection.Open();
command.ExecuteNonQuery();
}
catch (SqlException ex)
{
for (int i = 0; i < ex.Errors.Count; i++)
{
errorMessages.Append("Index #" + i + "\n" +
"Message: " + ex.Errors[i].Message + "\n" +
"LineNumber: " + ex.Errors[i].LineNumber + "\n" +
"Source: " + ex.Errors[i].Source + "\n" +
"Procedure: " + ex.Errors[i].Procedure + "\n");
}
Console.WriteLine(errorMessages.ToString());
}
}
}
Public Sub ShowSqlException(ByVal connectionString As String)
Dim queryString As String = "EXECUTE NonExistantStoredProcedure"
Dim errorMessages As New StringBuilder()
Using connection As New SqlConnection(connectionString)
Dim command As New SqlCommand(queryString, connection)
Try
command.Connection.Open()
command.ExecuteNonQuery()
Catch ex As SqlException
Dim i As Integer
For i = 0 To ex.Errors.Count - 1
errorMessages.Append("Index #" & i.ToString() & ControlChars.NewLine _
& "Message: " & ex.Errors(i).Message & ControlChars.NewLine _
& "LineNumber: " & ex.Errors(i).LineNumber & ControlChars.NewLine _
& "Source: " & ex.Errors(i).Source & ControlChars.NewLine _
& "Procedure: " & ex.Errors(i).Procedure & ControlChars.NewLine)
Next i
Console.WriteLine(errorMessages.ToString())
End Try
End Using
End Sub
Uwagi
Ta klasa jest tworzona za każdym razem, gdy .NET Framework Dostawca danych dla SQL Server napotka błąd wygenerowany na serwerze. (Błędy po stronie klienta są zgłaszane jako standardowe wyjątki środowiska uruchomieniowego języka wspólnego). SqlException zawsze zawiera co najmniej jedno wystąpienie klasy SqlError.
Komunikaty, które mają poziom ważności 10 lub mniej, są informacyjne i wskazują problemy spowodowane błędami w informacjach, które wprowadził użytkownik. Poziomy ważności od 11 do 16 są generowane przez użytkownika i mogą być poprawiane przez użytkownika. Poziomy ważności od 17 do 25 wskazują błędy oprogramowania lub sprzętu. Gdy wystąpi błąd poziomu 17, 18 lub 19, możesz kontynuować pracę, chociaż może nie być w stanie wykonać określonej instrukcji.
Pozostaje SqlConnection otwarty, gdy poziom ważności wynosi 19 lub mniej. Gdy poziom ważności wynosi 20 lub więcej, serwer zwykle zamyka SqlConnectionwartość . Użytkownik może jednak ponownie otworzyć połączenie i kontynuować. W obu przypadkach SqlException element jest generowany przez metodę wykonującą polecenie .
Aby uzyskać informacje o komunikatach ostrzegawczych i informacyjnych wysyłanych przez SQL Server, zobacz Database Engine Zdarzenia i błędy. Klasa SqlException jest mapowania na ważność SQL Server.
Poniżej przedstawiono ogólne informacje dotyczące obsługi wyjątków. Kod powinien przechwytywać wyjątki, aby zapobiec awarii aplikacji i umożliwić użytkownikowi wyświetlenie odpowiedniego komunikatu o błędzie. Możesz użyć transakcji bazy danych, aby upewnić się, że dane są spójne niezależnie od tego, co się dzieje w aplikacji klienckiej (w tym awarii). Funkcje takie jak System.Transaction.TransactionScope lub Metoda BeginTransaction (w system.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection i System.Data.SqlClient.SqlConnection) zapewniają spójne dane niezależnie od wyjątków zgłoszonych przez dostawcę. Transakcje mogą zakończyć się niepowodzeniem, więc przechwyć błędy i ponów próbę transakcji.
Należy pamiętać, że począwszy od .NET Framework 4.5, SqlException może zwrócić wewnętrzny Win32Exception.
Klasa wyjątków dostawcy danych platformy .NET Framework zgłasza błędy specyficzne dla dostawcy. Na przykład System.Data.Odbc ma wartość OdbcException, System.Data.OleDb ma obiekt OleDbException, a element System.Data.SqlClient ma wartość SqlException. Aby uzyskać najlepszy poziom szczegółów błędu, przechwyć te wyjątki i użyj elementów członkowskich tych klas wyjątków, aby uzyskać szczegółowe informacje o błędzie.
Oprócz błędów specyficznych dla dostawcy typy dostawców danych platformy .NET Framework mogą zgłaszać wyjątki .NET Framework, takie jak System.OutOfMemoryException i System.Threading.ThreadAbortException. Odzyskiwanie z tych wyjątków może nie być możliwe.
Nieprawidłowe dane wejściowe mogą spowodować, że typ dostawcy danych platformy .NET Framework zgłosi wyjątek, taki jak System.ArgumentException lub System.IndexOutOfRangeException. Wywołanie metody w niewłaściwym czasie może wywołać wyjątek System.InvalidOperationException.
Ogólnie rzecz biorąc, napisz procedurę obsługi wyjątków, która przechwytuje wszelkie wyjątki specyficzne dla dostawcy, a także wyjątki od środowiska uruchomieniowego języka wspólnego. Można je warstwować w następujący sposób:
try {
// code here
}
catch (SqlException odbcEx) {
// Handle more specific SqlException exception here.
}
catch (Exception ex) {
// Handle generic ones here.
}
Lub:
try {
// code here
}
catch (Exception ex) {
if (ex is SqlException) {
// Handle more specific SqlException exception here.
}
else {
// Handle generic ones here.
}
}
Istnieje również możliwość, że wywołanie metody dostawcy danych platformy .NET Framework kończy się niepowodzeniem w wątku puli wątków bez kodu użytkownika na stosie. W takim przypadku i w przypadku używania wywołań metody asynchronicznej należy zarejestrować UnhandledException zdarzenie, aby obsłużyć te wyjątki i uniknąć awarii aplikacji.
Właściwości
| Nazwa | Opis |
|---|---|
| Class |
Pobiera poziom ważności błędu zwróconego z dostawcy danych programu .NET Framework dla programu SQL Server. |
| ClientConnectionId |
Reprezentuje identyfikator połączenia klienta. Aby uzyskać więcej informacji, zobacz Śledzenie danych w ADO.NET. |
| Data |
Pobiera kolekcję par klucz/wartość, które zapewniają dodatkowe informacje zdefiniowane przez użytkownika dotyczące wyjątku. (Odziedziczone po Exception) |
| ErrorCode |
|
| Errors |
Pobiera kolekcję co najmniej jednego obiektu SqlError, które zawierają szczegółowe informacje o wyjątkach generowanych przez .NET Framework Dostawca danych dla SQL Server. |
| HelpLink |
Pobiera lub ustawia link do pliku pomocy skojarzonego z tym wyjątkiem. (Odziedziczone po Exception) |
| HResult |
Pobiera lub ustawia HRESULT, zakodowaną wartość liczbową przypisaną do określonego wyjątku. (Odziedziczone po Exception) |
| InnerException |
Exception Pobiera wystąpienie, które spowodowało bieżący wyjątek. (Odziedziczone po Exception) |
| LineNumber |
Pobiera numer wiersza w Transact-SQL partii poleceń lub procedury składowanej, która wygenerowała błąd. |
| Message |
Pobiera tekst opisujący błąd. |
| Message |
Pobiera komunikat opisujący bieżący wyjątek. (Odziedziczone po Exception) |
| Number |
Pobiera liczbę identyfikującą typ błędu. |
| Procedure |
Pobiera nazwę procedury składowanej lub zdalnego wywołania procedury (RPC), które wygenerowało błąd. |
| Server |
Pobiera nazwę komputera z uruchomionym wystąpieniem programu SQL Server, które wygenerowało błąd. |
| Source |
Pobiera nazwę dostawcy, który wygenerował błąd. |
| StackTrace |
Pobiera reprezentację ciągu natychmiastowych ramek na stosie wywołań. (Odziedziczone po Exception) |
| State |
Pobiera kod błędu liczbowego z programu SQL Server, który reprezentuje błąd, ostrzeżenie lub komunikat "nie znaleziono danych". Aby uzyskać więcej informacji na temat dekodowania tych wartości, zobacz Zdarzenia i błędy aparatu bazy danych. |
| TargetSite |
Pobiera metodę, która zgłasza bieżący wyjątek. (Odziedziczone po Exception) |
Metody
| Nazwa | Opis |
|---|---|
| Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
| GetBaseException() |
Po zastąpieniu w klasie pochodnej funkcja zwraca Exception główną przyczynę co najmniej jednego kolejnego wyjątku. (Odziedziczone po Exception) |
| GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Ustawia element SerializationInfo z informacjami o wyjątku. |
| GetType() |
Pobiera typ środowiska uruchomieniowego bieżącego wystąpienia. (Odziedziczone po Exception) |
| MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (Odziedziczone po Object) |
| ToString() |
Zwraca ciąg reprezentujący bieżący SqlException obiekt i zawiera identyfikator połączenia klienta (aby uzyskać więcej informacji, zobacz ClientConnectionId). |
| ToString() |
Tworzy i zwraca reprezentację ciągu bieżącego wyjątku. (Odziedziczone po Exception) |
| ToString() |
Zwraca ciąg zawierający hrESULT błędu. (Odziedziczone po ExternalException) |
Zdarzenia
| Nazwa | Opis |
|---|---|
| SerializeObjectState |
Występuje, gdy wyjątek jest serializowany w celu utworzenia obiektu stanu wyjątku zawierającego serializowane dane dotyczące wyjątku. (Odziedziczone po Exception) |