Aracılığıyla paylaş


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
[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
Devralma
SqlException
Öznitelikler

Örnekler

Aşağıdaki örnek bir SqlException oluşturur ve ardından özel durumu görüntüler.

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";
    }
}

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. 11 ile 16 arasında önem derecesi 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, 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 öğesini SqlConnectionkapatır. 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ı. sınıfı, SqlException SQL Server önem derecesine 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 Microsoft.Data.SqlClient.SqlConnection'da) gibi özellikler, sağlayıcı tarafından tetiklenen özel durumlara bakılmaksızın tutarlı veriler sağlar. İşlemler başarısız olabilir, bu nedenle hataları yakalayın ve işlemi yeniden deneyin.

.NET Framework 4.5 ile başlayarak bir SqlExceptionWin32Exceptiondö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 Microsoft.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 durumlara neden olabilir. 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öntemi ç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

Hatayı oluşturan BatchCommand örneğini veya bir toplu işlemden özel durum oluşturulmadıysa null değerini alır.

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.

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 nesne koleksiyonu alır.

LineNumber

Hatayı oluşturan Transact-SQL komut toplu işleminin veya saklı yordamın içindeki satır numarasını alır.

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.

State

SQL Server 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ı.

Yöntemler

GetObjectData(SerializationInfo, StreamingContext)
Geçersiz.

SerializationInfo özel durum hakkındaki bilgileri ile ayarlar.

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

Şunlara uygulanır

Ayrıca bkz.