SqlException Sınıf

Tanım

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 : 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
Devralma
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

SQL Server için .NET Framework Veri Sağlayıcısı sunucudan oluşturulan bir hatayla karşılaştığında bu sınıf oluşturulur. (İstemci tarafı hataları standart ortak dil çalışma zamanı özel durumları olarak oluşturulur.) SqlException her zaman en az bir örneğini SqlErroriçerir.

Önem derecesi 10 veya daha az olan iletiler bilgilendiricidir ve kullanıcının girdiği bilgilerdeki hatalardan kaynaklanan sorunları gösterir. 11 ile 16 arasında önem düzeyleri 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 çalışmaya devam edebilirsiniz, ancak belirli bir deyimi yürütemeyebilirsiniz.

önem SqlConnection düzeyi 19 veya daha az olduğunda açık kalır. Önem düzeyi 20 veya daha büyük 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öntem tarafından bir SqlException oluşturulur.

SQL Server tarafından gönderilen uyarı ve bilgilendirme iletileri hakkında bilgi için bkz. Veritabanı Altyapısı Olayları ve Hataları. SqlException sınıfı SQL Server önem derecesiyle eşler.

Özel durumları işleme hakkında genel bilgiler aşağıdadı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 gibi özellikler (System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection ve System.Data.SqlClient.SqlConnection'da), sağlayıcı tarafından oluşturulan ö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 bir SqlExceptionWin32Exceptiondöndürebileceğini unutmayın.

Bir .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ını tetikleyebilir. 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

BatchCommand

Bu DbException bir DbBatchyürütülürken oluşturulduysa, özel durumu tetikleyen özel DbBatchCommand duruma başvurur.

(Devralındığı yer: DbException)
Class

SQL Server için .NET Framework Veri Sağlayıcısı'ndan döndürülen hatanın önem düzeyini 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 bir anahtar/değer çifti koleksiyonu alır.

(Devralındığı yer: Exception)
DbBatchCommand

Türetilmiş bir sınıfta geçersiz kılındığında, bu DbException bir DbBatchyürütülürken oluşturulduysa, özel durumu tetikleyen özel DbBatchCommand duruma başvurur.

(Devralındığı yer: DbException)
ErrorCode

HRESULT Hatanın değerini alır.

(Devralındığı yer: ExternalException)
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 nesneden oluşan bir 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'u alır veya ayarlar.

(Devralındığı yer: Exception)
InnerException

Exception Geçerli özel duruma neden olan örneği alır.

(Devralındığı yer: Exception)
IsTransient

Bunun DbException temsil ettiği hatanın geçici bir hata olup olmadığını gösterir; örneğin, tetikleme işlemini yeniden denemenin başka bir değişiklik olmadan başarılı olup olmayacağını gösterir.

(Devralındığı yer: DbException)
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.

SqlState

Bunu destekleyen veritabanı sağlayıcıları için, veritabanı işleminin başarısını veya başarısızlığını gösteren standart bir SQL 5 karakterlik dönüş kodu içerir. İlk 2 karakter dönüş kodunun sınıfını (örneğin hata, başarı) temsil ederken, son 3 karakter alt sınıfı temsil ederek hata senaryolarının veritabanı taşınabilir bir şekilde algılanmasını sağlar.

Desteklemeyen veritabanı sağlayıcıları için veya uygulanabilir olmayan hata senaryoları için içerir null.

(Devralındığı yer: DbException)
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

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 değerini döndürür Exception .

(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.

GetObjectData(SerializationInfo, StreamingContext)
Geçersiz.

Türetilmiş bir sınıfta geçersiz kılındığında, özel durumla ilgili bilgilerle öğesini SerializationInfo ayarlar.

(Devralındığı yer: Exception)
GetType()

Geçerli örneğin çalışma zamanı türünü alır.

(Devralındığı yer: Exception)
MemberwiseClone()

Geçerli Objectöğesinin sığ 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()

Hatanın HRESULT değerini içeren bir dize döndürür.

(Devralındığı yer: ExternalException)
ToString()

Geçerli özel durumun dize gösterimini oluşturur ve döndürür.

(Devralındığı yer: Exception)

Ekinlikler

SerializeObjectState
Geçersiz.

Bir özel durum, özel durum hakkında serileştirilmiş veriler içeren bir özel durum nesnesi oluşturmak üzere seri hale getirildiğinde gerçekleşir.

(Devralındığı yer: Exception)

Şunlara uygulanır

Ayrıca bkz.