Bagikan melalui


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

Contoh

Contoh berikut menghasilkan SqlException lalu menampilkan pengecualian.

using Microsoft.Data.SqlClient;
using System.Text;

class Program
{
    static void Main()
    {
        string s = GetConnectionString();
        ShowSqlException(s);
        Console.ReadLine();
    }
    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());
            }
        }
    }

    static private string GetConnectionString()
    {
        // To avoid storing the connection string in your code, 
        // you can retrieve it from a configuration file.
        return "Data Source=(local);Initial Catalog=AdventureWorks;"
            + "Integrated Security=SSPI";
    }
}

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.

Tetap SqlConnection 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 untuk memungkinkan menampilkan pesan kesalahan yang relevan kepada pengguna. Anda dapat menggunakan transaksi database untuk memastikan bahwa data konsisten terlepas dari apa yang terjadi di aplikasi klien (termasuk crash). Fitur seperti System.Transaction.TransactionScope atau metode BeginTransaction (dalam System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection, dan Microsoft.Data.SqlClient.SqlConnection) memastikan data yang konsisten terlepas dari pengecualian yang diangkat 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 Microsoft.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 menimbulkan 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

Mendapatkan instans BatchCommand yang menghasilkan kesalahan atau null jika pengecualian tidak dimunculkan dari batch.

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.

Errors

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

LineNumber

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

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.

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.

Metode

GetObjectData(SerializationInfo, StreamingContext)
Kedaluwarsa.

SerializationInfo Mengatur dengan informasi tentang pengecualian.

ToString()

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

Berlaku untuk

Lihat juga