Aracılığıyla paylaş


CLR veritabanı nesnesinde hata ayıklama

Şunlar için geçerlidir: SQL Server

SQL Server, veritabanındaki Transact-SQL ve ortak dil çalışma zamanı (CLR) nesnelerinde hata ayıklama desteği sağlar. SQL Server'da hata ayıklamanın temel yönleri, kurulum ve kullanım kolaylığı ve SQL Server hata ayıklayıcısını Microsoft Visual Studio hata ayıklayıcısı ile tümleştirmedir. Ayrıca, hata ayıklama farklı dillerde çalışır. Kullanıcılar Transact-SQL'den CLR nesnelerine sorunsuz bir şekilde adım atabilir ve tam tersi de geçerlidir.

SQL Server Management Studio'daki Transact-SQL hata ayıklayıcısı yönetilen veritabanı nesnelerinde hata ayıklamak için kullanılamaz, ancak Visual Studio'daki hata ayıklayıcıları kullanarak nesnelerin hatalarını ayıklayabilirsiniz. Visual Studio'da yönetilen veritabanı nesne hata ayıklaması, adımı ve sunucuda yürütülen yordamlar içinde deyimleri üzerinden adım gibi tüm yaygın hata ayıklama özelliklerini destekler. Hata ayıklayıcılar kesme noktaları ayarlayabilir, çağrı yığınını inceleyebilir, değişkenleri inceleyebilir ve hata ayıklarken değişken değerlerini değiştirebilir.

İzinlerde ve kısıtlamalarda hata ayıklama

Hata ayıklama yüksek ayrıcalıklı bir işlemdir ve bu nedenle SQL Server'da yalnızca sysadmin sabit sunucu rolünün üyelerinin bunu yapmalarına izin verilir.

Hata ayıklama sırasında aşağıdaki kısıtlamalar geçerlidir:

  • CLR yordamlarında hata ayıklama, aynı anda bir hata ayıklayıcısı örneğiyle sınırlıdır. Bu sınırlama, bir kesme noktasına isabet edildiğinde tüm CLR kod yürütmesinin donması ve hata ayıklayıcı kesme noktasından ilerlemeden yürütmenin devam etmemesi nedeniyle geçerlidir. Yine de diğer bağlantılarda Transact-SQL'in hata ayıklamasına devam edebilirsiniz. Transact-SQL hata ayıklaması sunucudaki diğer yürütmeleri dondurmasa da, kilit tutarak diğer bağlantıların beklemesine neden olabilir.

  • Bağlantı kurulmadan önce SQL Server istemci ve hata ayıklayıcı ortamı hakkında bilgi gerektirdiğinden, var olan bağlantılarda hata ayıklanamaz, yalnızca yeni bağlantılar.

Bu nedenle Transact-SQL ve CLR kodunun üretim sunucusunda değil test sunucusunda hata ayıklamasını öneririz.

Genel bakış

SQL Server'da hata ayıklama, bağlantı başına modeli izler. Hata ayıklayıcı yalnızca bağlı olduğu istemci bağlantısındaki etkinlikleri algılayabilir ve hatalarını ayıklayabilir. Hata ayıklayıcının işlevselliği bağlantı türüyle sınırlı olmadığından, hem tablosal veri akışı (TDS) hem de HTTP bağlantılarında hata ayıklanabilir. Ancak, SQL Server var olan bağlantılarda hata ayıklamaya izin vermez. Hata ayıklama, sunucuda yürütülen yordamlar içindeki tüm yaygın hata ayıklama özelliklerini destekler. Bir hata ayıklayıcısı ile SQL Server arasındaki etkileşim dağıtılmış Bileşen Nesne Modeli (COM) aracılığıyla gerçekleşir.

Yönetilen saklı yordamların, işlevlerin, tetikleyicilerin, kullanıcı tanımlı türlerin ve toplamaların hatalarını ayıklama hakkında daha fazla bilgi ve senaryo için Visual Studio belgelerindeki SQL Server CLR Tümleştirme Veritabanı Hata Ayıklama bakın.

Uzaktan geliştirme, hata ayıklama ve geliştirme için Visual Studio'yu kullanabilmek için SQL Server örneğinde TCP/IP ağ protokolü etkinleştirilmelidir. Sunucuda TCP/IP protokollerini etkinleştirme hakkında daha fazla bilgi için bkz. İstemci Protokollerini Yapılandırma.

Hata ayıklama adımları

Microsoft Visual Studio'da CLR veritabanı nesnesinde hata ayıklamak için aşağıdaki adımları kullanın:

  1. Microsoft Visual Studio'yu açın ve yeni bir SQL Server projesi oluşturun. Visual Studio ile birlikte gelen SQL LocalDB örneğini kullanabilirsiniz.

  2. Yeni bir SQL CLR türü oluşturun (C#):

    1. Çözüm Gezgini'nde projeye sağ tıklayın ve Ekle'yi seçin, Yeni Öğe....
    2. Yeni Öğe Ekle penceresinden SQL CLR C# Saklı Yordamı, SQL CLR C# User-Defined İşlev, SQL CLR C# User-Defined Tür, SQL CLR C# Tetikleyici, SQL CLR C# Toplamaveya Sınıföğesini seçin.
    3. Yeni türdeki kaynak dosya için bir ad belirtin ve Ekle'yi seçin.
  3. Yeni türün kodunu metin düzenleyicisine ekleyin. Örnek bir saklı yordamın kodunu görmek için bu makaledeki örnek bölümüne bakın.

  4. Türü test eden bir betik ekleyin:

    1. Çözüm Gezginibölümünde proje düğümüne sağ tıklayın ve Ekle, Betik...seçin.
    2. Yeni Öğe Ekle penceresindeBetik (Derlemede Değil) öğesini seçin ve gibi bir ad belirtin. Ekle düğmesini seçin.
    3. Çözüm Gezgini'nde, varsayılan test betiği kaynak dosyasını açmak için Test.sql düğümüne çift tıklayın.
    4. Test betiğini (hata ayıklanacak kodu çağıran betiği) metin düzenleyicisine ekleyin. Sonraki bölümdeki örnek betiğe bakın.
  5. Kaynak koda bir veya daha fazla kesme noktası yerleştirin. Hata ayıklamak istediğiniz işlev veya yordamda metin düzenleyicisinde bir kod satırına sağ tıklayın. Kesme Noktası'i seçin,kesme noktası ekleyin . Kesme noktası eklenir ve kod satırı kırmızıyla vurgulanır.

  6. Hata Ayıklama menüsünde, projeyi derlemek, dağıtmak ve test etmek için Hata Ayıklamayı Başlat seçin. Test.sql'daki test betiği çalıştırılır ve yönetilen veritabanı nesnesi çağrılır.

  7. Kesme noktasında sarı ok (yönerge işaretçisini belirleme) görüntülendiğinde kod yürütme duraklatılır. Ardından yönetilen veritabanı nesnenizde hata ayıklayabilirsiniz:

    1. yönerge işaretçisini bir sonraki kod satırına ilerletmek için Hata Ayıklama menüsünden Adım Geç kullanın.
    2. Yönerge işaretçisi tarafından vurgulanan nesnelerin durumunu gözlemlemek için Locals penceresini kullanın.
    3. İzleme penceresine değişkenler ekleyin. Hata ayıklama oturumu boyunca, izlenen değişkenlerin durumunu, işaretçi tarafından vurgulanan kod satırında olmasalar bile gözlemleyebilirsiniz.
    4. Hata Ayıklama menüsünden Devam Et seçeneğini seçerek komut işaretçisini bir sonraki kesme noktasına ilerletin veya başka kesme noktası yoksa yordamı tamamlayın.

Örnek kod

Aşağıdaki C# örneği, çağırana SQL Server sürümünü döndürür.

using System.Data.SqlClient;
using Microsoft.SqlServer.Server;

public class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void GetVersion()
    {
        using (var connection = new SqlConnection("context connection=true"))
        {
            connection.Open();
            var command = new SqlCommand("select @@version", connection);
            SqlContext.Pipe.ExecuteAndSend(command);
        }
    }
}

Örnek test betiği

Aşağıdaki test betiğinde, önceki örnekte tanımlanan GetVersion saklı yordamın nasıl çağrıldığı gösterilmektedir.

EXECUTE GetVersion;