SqlException Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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). |