SqlException Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
SQL Server bir uyarı veya hata döndürdüğünde oluşan özel durum. Bu sınıf devralınamaz.
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
- Devralma
- Devralma
- Öznitelikler
Örnekler
Aşağıdaki örnek bir SqlException oluşturur ve ardından özel durumu görüntüler.
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
Açıklamalar
bu sınıf, SQL Server için .NET Framework Veri Sağlayıcısı sunucudan oluşturulan bir hatayla karşılaştığında oluşturulur. (İstemci tarafı hataları standart ortak dil çalışma zamanı özel durumları olarak oluşturulur.) SqlException her zaman en az bir örneği SqlErroriçerir.
Önem derecesi 10 veya daha az olan iletiler bilgilendiricidir ve kullanıcının girdiği bilgilerdeki hatalardan kaynaklanan sorunları gösterir. Önem derecesi düzeyleri 11 ile 16 arasında kullanıcı tarafından oluşturulur ve kullanıcı tarafından düzeltilebilir. 17 ile 25 arasında önem derecesi, yazılım veya donanım hatalarını gösterir. Düzey 17, 18 veya 19 hatası oluştuğunda, belirli bir deyimi yürütemeseniz de çalışmaya devam edebilirsiniz.
Önem SqlConnection düzeyi 19 veya daha az olduğunda açık kalır. Önem düzeyi 20 veya daha yüksek olduğunda, sunucu normalde kapatır SqlConnection. Ancak kullanıcı bağlantıyı yeniden açabilir ve devam edebilir. Her iki durumda da komutunu yürüten yöntemi tarafından bir SqlException oluşturulur.
SQL Server tarafından gönderilen uyarı ve bilgilendirme iletileri hakkında bilgi için bkz. Database Engine Olaylar ve Hatalar. SqlException sınıfı SQL Server önem derecesiyle eşler.
Aşağıda özel durumların işlenmesiyle ilgili genel bilgiler yer alır. Kodunuz, uygulamanın kilitlenmesini önlemek ve kullanıcıya ilgili bir hata iletisi görüntülenmesine izin vermek için özel durumları yakalamalıdır. İstemci uygulamasında ne olursa olsun (kilitlenme dahil) verilerin tutarlı olduğundan emin olmak için veritabanı işlemlerini kullanabilirsiniz. System.Transaction.TransactionScope veya BeginTransaction yöntemi (System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection ve System.Data.SqlClient.SqlConnection'da) gibi özellikler, sağlayıcı tarafından tetiklenen özel durumlardan bağımsız olarak tutarlı veriler sağlar. İşlemler başarısız olabilir, bu nedenle hataları yakalayın ve işlemi yeniden deneyin.
.NET Framework 4.5'le başlayarak SqlException iç Win32Exception döndürebileceğini unutmayın.
.NET Framework veri sağlayıcısının özel durum sınıfı sağlayıcıya özgü hataları bildirir. Örneğin System.Data.Odbc'de OdbcException, System.Data.OleDb'de OleDbException ve System.Data.SqlClient'da SqlException vardır. Hata ayrıntılarının en iyi düzeyi için bu özel durumları yakalayın ve hatanın ayrıntılarını almak için bu özel durum sınıflarının üyelerini kullanın.
Sağlayıcıya özgü hatalara ek olarak, .NET Framework veri sağlayıcısı türleri System.OutOfMemoryException ve System.Threading.ThreadAbortException gibi .NET Framework özel durumları oluşturabilir. Bu özel durumlardan kurtarma mümkün olmayabilir.
Hatalı giriş, .NET Framework veri sağlayıcısı türünün System.ArgumentException veya System.IndexOutOfRangeException gibi bir özel durum oluşturmasına neden olabilir. Bir yöntemin yanlış zamanda çağrılması System.InvalidOperationException'ı tetikleyebilir.
Bu nedenle, genel olarak, sağlayıcıya özgü özel durumları ve ortak dil çalışma zamanı özel durumlarını yakalayan bir özel durum işleyicisi yazın. Bunlar aşağıdaki gibi katmanlanabilir:
try {
// code here
}
catch (SqlException odbcEx) {
// Handle more specific SqlException exception here.
}
catch (Exception ex) {
// Handle generic ones here.
}
Veya:
try {
// code here
}
catch (Exception ex) {
if (ex is SqlException) {
// Handle more specific SqlException exception here.
}
else {
// Handle generic ones here.
}
}
.NET Framework veri sağlayıcısı yöntem çağrısının yığında kullanıcı kodu olmayan bir iş parçacığı havuzu iş parçacığında başarısız olması da mümkündür. Bu durumda ve zaman uyumsuz yöntem çağrılarını kullanırken, bu özel durumları işlemek ve uygulama kilitlenmesini UnhandledException önlemek için olayı kaydetmeniz gerekir.
Özellikler
| Name | Description |
|---|---|
| Class |
SQL Server için .NET Framework Veri Sağlayıcısı'ndan döndürülen hatanın önem derecesini alır. |
| ClientConnectionId |
İstemci bağlantı kimliğini temsil eder. Daha fazla bilgi için bkz. ADO.NET'de Veri İzleme. |
| Data |
Özel durum hakkında kullanıcı tanımlı ek bilgiler sağlayan anahtar/değer çiftleri koleksiyonunu alır. (Devralındığı yer: Exception) |
| ErrorCode |
|
| Errors |
SQL Server için .NET Framework Veri Sağlayıcısı tarafından oluşturulan özel durumlar hakkında ayrıntılı bilgi veren bir veya daha fazla SqlError nesnesi koleksiyonu alır. |
| HelpLink |
Bu özel durumla ilişkili yardım dosyasının bağlantısını alır veya ayarlar. (Devralındığı yer: Exception) |
| HResult |
Belirli bir özel duruma atanan kodlanmış sayısal bir değer olan HRESULT değerini alır veya ayarlar. (Devralındığı yer: Exception) |
| InnerException |
Geçerli özel duruma neden olan Exception örneğini alır. (Devralındığı yer: Exception) |
| LineNumber |
Hatayı oluşturan Transact-SQL komut toplu işleminin veya saklı yordamın içindeki satır numarasını alır. |
| Message |
Hatayı açıklayan metni alır. |
| Message |
Geçerli özel durumu açıklayan bir ileti alır. (Devralındığı yer: Exception) |
| Number |
Hata türünü tanımlayan bir sayı alır. |
| Procedure |
Hatayı oluşturan saklı yordamın veya uzak yordam çağrısının (RPC) adını alır. |
| Server |
Hatayı oluşturan SQL Server örneğini çalıştıran bilgisayarın adını alır. |
| Source |
Hatayı oluşturan sağlayıcının adını alır. |
| StackTrace |
Çağrı yığınındaki anlık çerçevelerin dize gösterimini alır. (Devralındığı yer: Exception) |
| State |
SQL Server'dan bir hata, uyarı veya "veri bulunamadı" iletisini temsil eden sayısal bir hata kodu alır. Bu değerlerin kodunu çözme hakkında daha fazla bilgi için bkz. Veritabanı Altyapısı Olayları ve Hataları. |
| TargetSite |
Geçerli özel durumu oluşturan yöntemini alır. (Devralındığı yer: Exception) |
Yöntemler
| Name | Description |
|---|---|
| Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
| GetBaseException() |
Türetilmiş bir sınıfta geçersiz kılındığında, sonraki bir veya daha fazla özel durumun kök nedeni olan Exception döndürür. (Devralındığı yer: Exception) |
| GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
SerializationInfo öğesini özel durumla ilgili bilgilerle ayarlar. |
| GetType() |
Geçerli örneğin çalışma zamanı türünü alır. (Devralındığı yer: Exception) |
| MemberwiseClone() |
Geçerli Objectbasit bir kopyasını oluşturur. (Devralındığı yer: Object) |
| ToString() |
Geçerli SqlException nesneyi temsil eden ve istemci bağlantı kimliğini içeren bir dize döndürür (daha fazla bilgi için bkz ClientConnectionId. ). |
| ToString() |
Geçerli özel durumun dize gösterimini oluşturur ve döndürür. (Devralındığı yer: Exception) |
| ToString() |
Hatanın HRESULT değerini içeren bir dize döndürür. (Devralındığı yer: ExternalException) |
Ekinlikler
| Name | Description |
|---|---|
| SerializeObjectState |
Özel durum hakkında serileştirilmiş veriler içeren bir özel durum durumu nesnesi oluşturmak için bir özel durum seri hale getirildiğinde gerçekleşir. (Devralındığı yer: Exception) |