SqlException Kelas

Definisi

Pengecualian yang dilemparkan saat SQL Server mengembalikan peringatan atau kesalahan. Kelas ini tidak dapat diwariskan.

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 : System.Data.Common.DbException
[System.Serializable]
public sealed class SqlException : SystemException
type SqlException = class
    inherit DbException
[<System.Serializable>]
type SqlException = class
    inherit DbException
[<System.Serializable>]
type SqlException = class
    inherit SystemException
Public NotInheritable Class SqlException
Inherits DbException
Public NotInheritable Class SqlException
Inherits SystemException
Warisan
Warisan
Warisan
Atribut

Contoh

Contoh berikut menghasilkan SqlException lalu menampilkan pengecualian.

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

Keterangan

Kelas ini dibuat setiap kali Penyedia Data .NET Framework untuk SQL Server mengalami kesalahan yang dihasilkan dari server. (Kesalahan sisi klien dilemparkan sebagai pengecualian runtime bahasa umum standar.) SqlException selalu berisi setidaknya satu instans SqlError.

Pesan yang memiliki tingkat keparahan 10 atau kurang adalah informasi dan menunjukkan masalah yang disebabkan oleh kesalahan dalam informasi yang dimasukkan pengguna. Tingkat keparahan dari 11 hingga 16 dihasilkan oleh pengguna, dan dapat dikoreksi oleh pengguna. Tingkat keparahan dari 17 hingga 25 menunjukkan kesalahan perangkat lunak atau perangkat keras. Ketika kesalahan tingkat 17, 18, atau 19 terjadi, Anda dapat terus bekerja, meskipun Anda mungkin tidak dapat menjalankan pernyataan tertentu.

SqlConnection Tetap terbuka ketika tingkat keparahan adalah 19 atau kurang. Ketika tingkat keparahan adalah 20 atau lebih besar, server biasanya menutup SqlConnection. Namun, pengguna dapat membuka kembali koneksi dan melanjutkan. Dalam kedua kasus, SqlException dihasilkan oleh metode yang menjalankan perintah.

Untuk informasi tentang pesan peringatan dan informasi yang dikirim oleh SQL Server, lihat Peristiwa dan Kesalahan Mesin Database. Kelas SqlException memetakan ke tingkat keparahan SQL Server.

Berikut ini adalah informasi umum tentang penanganan pengecualian. Kode Anda harus menangkap pengecualian untuk mencegah aplikasi crash dan memungkinkan menampilkan pesan kesalahan yang relevan kepada pengguna. Anda dapat menggunakan transaksi database untuk memastikan bahwa data konsisten terlepas dari apa yang terjadi dalam aplikasi klien (termasuk crash). Fitur seperti System.Transaction.TransactionScope atau metode BeginTransaction (dalam System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection, dan System.Data.SqlClient.SqlConnection) memastikan data yang konsisten terlepas dari pengecualian yang diajukan oleh penyedia. Transaksi dapat gagal, sehingga menangkap kegagalan dan mencoba kembali transaksi.

Perhatikan bahwa dimulai dengan .NET Framework 4.5, SqlException dapat mengembalikan bagian dalam Win32Exception.

Kelas pengecualian penyedia data .NET Framework melaporkan kesalahan khusus penyedia. Misalnya System.Data.Odbc memiliki OdbcException, System.Data.OleDb memiliki OleDbException, dan System.Data.SqlClient memiliki SqlException. Untuk tingkat detail kesalahan terbaik, tangkap pengecualian ini dan gunakan anggota kelas pengecualian ini untuk mendapatkan detail kesalahan.

Selain kesalahan khusus penyedia, .NET Framework jenis penyedia data dapat meningkatkan pengecualian .NET Framework seperti System.OutOfMemoryException dan System.Threading.ThreadAbortException. Pemulihan dari pengecualian ini mungkin tidak dimungkinkan.

Input buruk dapat menyebabkan jenis penyedia data .NET Framework memunculkan pengecualian seperti System.ArgumentException atau System.IndexOutOfRangeException. Memanggil metode pada waktu yang salah dapat meningkatkan System.InvalidOperationException.

Jadi, secara umum, tulis handler pengecualian yang menangkap pengecualian spesifik penyedia apa pun serta pengecualian dari runtime bahasa umum. Ini dapat dilapisi sebagai berikut:

try {  
   // code here  
}  
catch (SqlException odbcEx) {  
   // Handle more specific SqlException exception here.  
}  
catch (Exception ex) {  
   // Handle generic ones here.  
}  

Atau:

try {  
   // code here  
}  
catch (Exception ex) {  
   if (ex is SqlException) {  
      // Handle more specific SqlException exception here.  
   }  
   else {  
      // Handle generic ones here.  
   }  
}  

Dimungkinkan juga untuk panggilan metode penyedia data .NET Framework gagal pada utas kumpulan utas tanpa kode pengguna pada tumpukan. Dalam hal ini, dan saat menggunakan panggilan metode asinkron, Anda harus mendaftarkan peristiwa untuk menangani pengecualian tersebut UnhandledException dan menghindari crash aplikasi.

Properti

BatchCommand

Jika ini DbException dilemparkan saat mengeksekusi , mereferensikan DbBatchspesifik DbBatchCommand yang memicu pengecualian.

(Diperoleh dari DbException)
Class

Mendapatkan tingkat keparahan kesalahan yang dikembalikan dari Penyedia Data .NET Framework untuk SQL Server.

ClientConnectionId

Mewakili ID koneksi klien. Untuk informasi selengkapnya, baca Pelacakan Data di ADO.NET.

Data

Mendapatkan kumpulan pasangan kunci/nilai yang memberikan informasi tambahan yang ditentukan pengguna tentang pengecualian.

(Diperoleh dari Exception)
DbBatchCommand

Ketika ditimpa di kelas turunan, jika ini DbException dilemparkan saat mengeksekusi , mereferensikan DbBatchspesifik DbBatchCommand yang memicu pengecualian.

(Diperoleh dari DbException)
ErrorCode

HRESULT Mendapatkan kesalahan.

(Diperoleh dari ExternalException)
Errors

Mendapatkan kumpulan satu atau beberapa SqlError objek yang memberikan informasi terperinci tentang pengecualian yang dihasilkan oleh Penyedia Data .NET Framework untuk SQL Server.

HelpLink

Mendapatkan atau mengatur tautan ke file bantuan yang terkait dengan pengecualian ini.

(Diperoleh dari Exception)
HResult

Mendapatkan atau mengatur HRESULT, nilai numerik berkode yang ditetapkan ke pengecualian tertentu.

(Diperoleh dari Exception)
InnerException

Mendapatkan instans Exception yang menyebabkan pengecualian saat ini.

(Diperoleh dari Exception)
IsTransient

Menunjukkan apakah kesalahan yang diwakili oleh ini DbException bisa menjadi kesalahan sementara, yaitu jika mencoba kembali operasi pemicu mungkin berhasil tanpa perubahan lain.

(Diperoleh dari DbException)
LineNumber

Mendapatkan nomor baris dalam batch perintah Transact-SQL atau prosedur tersimpan yang menghasilkan kesalahan.

Message

Mendapatkan teks yang menjelaskan kesalahan.

Message

Mendapatkan pesan yang menjelaskan pengecualian saat ini.

(Diperoleh dari Exception)
Number

Mendapatkan angka yang mengidentifikasi jenis kesalahan.

Procedure

Mendapatkan nama prosedur tersimpan atau panggilan prosedur jarak jauh (RPC) yang menghasilkan kesalahan.

Server

Mendapatkan nama komputer yang menjalankan instans SQL Server yang menghasilkan kesalahan.

Source

Mendapatkan nama penyedia yang menghasilkan kesalahan.

SqlState

Untuk penyedia database yang mendukungnya, berisi kode pengembalian karakter SQL 5 standar yang menunjukkan keberhasilan atau kegagalan operasi database. 2 karakter pertama mewakili kelas kode pengembalian (misalnya kesalahan, keberhasilan), sementara 3 karakter terakhir mewakili subkelas, memungkinkan deteksi skenario kesalahan dengan cara portabel database.

Untuk penyedia database yang tidak mendukungnya, atau untuk skenario kesalahan yang tidak dapat diaplikasikan, berisi null.

(Diperoleh dari DbException)
StackTrace

Mendapatkan representasi string dari bingkai langsung pada tumpukan panggilan.

(Diperoleh dari Exception)
State

Mendapatkan kode kesalahan numerik dari SQL Server yang mewakili pesan kesalahan, peringatan, atau "tidak ada data yang ditemukan". Untuk informasi selengkapnya tentang cara mendekode nilai-nilai ini, lihat Peristiwa dan Kesalahan Mesin Database.

TargetSite

Mendapatkan metode yang melemparkan pengecualian saat ini.

(Diperoleh dari Exception)

Metode

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetBaseException()

Ketika ditimpa di kelas turunan Exception , mengembalikan yang merupakan akar penyebab dari satu atau beberapa pengecualian berikutnya.

(Diperoleh dari Exception)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetObjectData(SerializationInfo, StreamingContext)

SerializationInfo Mengatur dengan informasi tentang pengecualian.

GetObjectData(SerializationInfo, StreamingContext)
Kedaluwarsa.

Saat ditimpa di kelas turunan SerializationInfo , mengatur dengan informasi tentang pengecualian.

(Diperoleh dari Exception)
GetType()

Mendapatkan jenis runtime dari instans saat ini.

(Diperoleh dari Exception)
MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini SqlException , dan menyertakan ID koneksi klien (untuk informasi selengkapnya, lihat ClientConnectionId).

ToString()

Mengembalikan string yang berisi HRESULT kesalahan.

(Diperoleh dari ExternalException)
ToString()

Membuat dan mengembalikan representasi string dari pengecualian saat ini.

(Diperoleh dari Exception)

Acara

SerializeObjectState
Kedaluwarsa.

Terjadi ketika pengecualian diserialisasikan untuk membuat objek status pengecualian yang berisi data berseri tentang pengecualian.

(Diperoleh dari Exception)

Berlaku untuk

Lihat juga