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, gdy program SQL Server zwraca ostrzeżenie lub błąd. Klasa ta nie może być dziedziczona.
public ref class SqlException sealed : System::Data::Common::DbException
public ref class SqlException sealed : SystemException
public sealed class SqlException : System.Data.Common.DbException
[System.Serializable]
public sealed class SqlException : SystemException
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
type SqlException = class
inherit DbException
[<System.Serializable>]
type SqlException = class
inherit SystemException
[<System.Serializable>]
type SqlException = class
inherit DbException
Public NotInheritable Class SqlException
Inherits DbException
Public NotInheritable Class SqlException
Inherits SystemException
- Dziedziczenie
- Dziedziczenie
- Dziedziczenie
- Atrybuty
Przykłady
Poniższy przykład generuje wyjątek 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 dostawca danych programu .NET Framework dla programu 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 o poziomie ważności 10 lub mniejszym są informacyjne i wskazują problemy spowodowane błędami w informacjach wprowadzonych przez użytkownika. 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ż nie można 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 element SqlConnection. 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 program SQL Server, zobacz Zdarzenia i błędy aparatu bazy danych. Klasa SqlException mapuje ważność programu 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ć wyświetlanie użytkownikowi 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łaszanych 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 programu .NET Framework 4.5, SqlException może zwrócić wewnętrzny Win32Exceptionelement .
Klasa wyjątku dostawcy danych programu .NET Framework zgłasza błędy specyficzne dla dostawcy. Na przykład system.Data.Odbc ma wartość OdbcException, system.Data.OleDb ma wyjątek OleDbException, a element System.Data.SqlClient ma wyjątek SqlException. Aby uzyskać najlepszy poziom szczegółów błędów, przechwyć te wyjątki i użyj składowych 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 programu .NET Framework mogą zgłaszać wyjątki programu .NET Framework, takie jak System.OutOfMemoryException i System.Threading.ThreadAbortException. Odzyskiwanie z tych wyjątków może być niemożliwe.
Nieprawidłowe dane wejściowe mogą spowodować, że typ dostawcy danych programu .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ść niepowodzenia wywołania metody dostawcy danych .NET Framework w wątku puli wątków bez kodu użytkownika na stosie. W tym 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
BatchCommand |
Jeśli zostało to DbException zwrócone podczas wykonywania elementu DbBatch, odwołuje się do określonego DbBatchCommand elementu, który wyzwolił wyjątek. (Odziedziczone po DbException) |
Class |
Pobiera poziom ważności błędu zwróconego przez dostawcę 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) |
DbBatchCommand |
Po przesłonięciu w klasie pochodnej, jeśli został on DbException zgłoszony podczas wykonywania DbBatchklasy , odwołuje się do określonego DbBatchCommand , który wyzwolił wyjątek. (Odziedziczone po DbException) |
ErrorCode |
|
Errors |
Pobiera kolekcję jednego lub większej liczby SqlError obiektów, które zawierają szczegółowe informacje o wyjątkach generowanych przez dostawcę danych programu .NET Framework dla programu 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) |
IsTransient |
Wskazuje, czy błąd reprezentowany przez ten DbException błąd może być błędem przejściowym, tj. jeśli ponowienie próby operacji wyzwalania może zakończyć się powodzeniem bez żadnych innych zmian. (Odziedziczone po DbException) |
LineNumber |
Pobiera numer wiersza w partii poleceń Języka Transact-SQL lub procedurę składowaną, 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. |
SqlState |
W przypadku dostawców baz danych, którzy ją obsługują, zawiera standardowy kod powrotny SQL 5 znaków wskazujący powodzenie lub niepowodzenie operacji bazy danych. Pierwsze 2 znaki reprezentują klasę kodu powrotnego (np. błąd, powodzenie), podczas gdy ostatnie 3 znaki reprezentują podklasę, umożliwiając wykrywanie scenariuszy błędów w przenośnej bazie danych. W przypadku dostawców baz danych, którzy jej nie obsługują, lub w przypadku scenariuszy błędów, których nie można zastosować, zawiera wartość |
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 komunikat o błędzie, ostrzeżeniu lub "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
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetBaseException() |
Po przesłonięciu 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. |
GetObjectData(SerializationInfo, StreamingContext) |
Przestarzałe.
Po zastąpieniu w klasie pochodnej ustawia SerializationInfo element z informacjami o wyjątku. (Odziedziczone po Exception) |
GetType() |
Pobiera typ środowiska uruchomieniowego bieżącego wystąpienia. (Odziedziczone po Exception) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (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() |
Zwraca ciąg zawierający wartość HRESULT błędu. (Odziedziczone po ExternalException) |
ToString() |
Tworzy i zwraca reprezentację ciągu bieżącego wyjątku. (Odziedziczone po Exception) |
Zdarzenia
SerializeObjectState |
Przestarzałe.
Występuje, gdy wyjątek jest serializowany w celu utworzenia obiektu stanu wyjątku, który zawiera serializowane dane dotyczące wyjątku. (Odziedziczone po Exception) |