Cara men-debug objek database CLR

Berlaku untuk:SQL Server

SQL Server menyediakan dukungan untuk penelusuran kesalahan objek Transact-SQL dan common language runtime (CLR) dalam database. Aspek utama penelusuran kesalahan di SQL Server adalah kemudahan penyiapan dan penggunaan, dan integrasi debugger SQL Server dengan debugger Microsoft Visual Studio. Selain itu, penelusuran kesalahan berfungsi di seluruh bahasa. Pengguna dapat melangkah dengan mulus ke objek CLR dari Transact-SQL, dan sebaliknya. Debugger Transact-SQL di SQL Server Management Studio tidak dapat digunakan untuk men-debug objek database terkelola, tetapi Anda dapat men-debug objek dengan menggunakan debugger di Visual Studio. Penelusuran kesalahan objek database terkelola di Visual Studio mendukung semua fitur penelusuran kesalahan umum, seperti pernyataan "langkah ke" dan "langkah di atas" dalam rutinitas yang dijalankan di server. Debugger dapat mengatur titik henti, memeriksa tumpukan panggilan, memeriksa variabel, dan mengubah nilai variabel saat penelusuran kesalahan.

Catatan

Visual Studio .NET 2003 tidak dapat digunakan untuk pemrograman atau penelusuran kesalahan integrasi CLR. SQL Server menyertakan .NET Framework yang telah diinstal sebelumnya, dan Visual Studio .NET 2003 tidak dapat menggunakan rakitan .NET Framework 2.0.

Izin dan batasan penelusuran kesalahan

Penelusuran kesalahan adalah operasi yang sangat istimewa, dan oleh karena itu hanya anggota peran server tetap sysadmin yang diizinkan untuk melakukannya di SQL Server.

Pembatasan berikut berlaku saat penelusuran kesalahan:

  • Debugging rutinitas CLR dibatasi untuk satu instans debugger pada satu waktu. Batasan ini berlaku karena semua eksekusi kode CLR membeku ketika titik henti dipukul dan eksekusi tidak berlanjut sampai debugger maju dari titik henti. Namun, Anda dapat melanjutkan penelusuran kesalahan Transact-SQL di koneksi lain. Meskipun penelusuran kesalahan Transact-SQL tidak membekukan eksekusi lain di server, itu dapat menyebabkan koneksi lain menunggu dengan menahan kunci.

  • Koneksi yang ada tidak dapat di-debug, hanya koneksi baru, karena SQL Server memerlukan informasi tentang klien dan lingkungan debugger sebelum koneksi dapat dibuat.

Karena pembatasan di atas, kami menyarankan agar kode Transact-SQL dan CLR di-debug di server pengujian, dan bukan di server produksi.

Gambaran Umum

Penelusuran kesalahan di SQL Server mengikuti model per koneksi. Debugger dapat mendeteksi dan men-debug aktivitas hanya ke koneksi klien yang terpasang. Karena fungsionalitas debugger tidak dibatasi oleh jenis koneksi, koneksi aliran data tabular (TDS) dan HTTP dapat di-debug. Namun, SQL Server tidak mengizinkan penelusuran kesalahan koneksi yang ada. Penelusuran kesalahan mendukung semua fitur penelusuran kesalahan umum dalam rutinitas yang dijalankan di server. Interaksi antara debugger dan SQL Server terjadi melalui Model Objek Komponen terdistribusi (COM).

Untuk informasi dan skenario selengkapnya tentang penelusuran kesalahan prosedur tersimpan terkelola, fungsi, pemicu, jenis yang ditentukan pengguna, dan agregat, lihat Penelusuran Kesalahan Database Integrasi CLR SQL Server dalam dokumentasi Visual Studio.

Protokol jaringan TCP/IP harus diaktifkan pada instans SQL Server untuk menggunakan Visual Studio untuk pengembangan, penelusuran kesalahan, dan pengembangan jarak jauh. Untuk informasi selengkapnya tentang mengaktifkan protokol TCP/IP di server, lihat Mengonfigurasi Protokol Klien.

Langkah-langkah penelusuran kesalahan

Gunakan langkah-langkah berikut untuk men-debug objek database CLR di Microsoft Visual Studio:

  1. Buka Microsoft Visual Studio, dan buat proyek SQL Server baru. Anda dapat menggunakan instans SQL LocalDB yang dilengkapi dengan Visual Studio.

  2. Buat jenis SQL CLR baru (C#):

    1. Di Penjelajah Solusi, klik kanan proyek, dan pilih Tambahkan, Item Baru....
    2. Dari jendela Tambahkan Item Baru, pilih Prosedur Tersimpan SQL CLR C#, Fungsi Yang Ditentukan Pengguna SQL CLR C#, Jenis yang Ditentukan Pengguna, Pemicu SQL CLR C#, Agregat C# SQL CLR, atau Kelas.
    3. Tentukan nama untuk file sumber dari jenis baru, lalu pilih Tambahkan.
  3. Tambahkan kode untuk jenis baru ke editor teks. Untuk contoh kode untuk contoh prosedur tersimpan, lihat bagian Contoh berikut di artikel ini.

  4. Tambahkan skrip yang menguji jenis:

    1. Di Penjelajah Solusi, klik kanan pada simpul proyek dan pilih Tambahkan, Skrip....
    2. Di jendela Tambahkan Item Baru, pilih Skrip (Tidak dalam build), dan tentukan nama, seperti Test.sql. Pilih tombol Tambahkan.
    3. Di Penjelajah Solusi, klik dua kali simpul Test.sql untuk membuka file sumber skrip pengujian default.
    4. Tambahkan skrip pengujian (yang memanggil kode yang akan di-debug) ke editor teks. Lihat contoh di bagian berikutnya untuk contoh skrip.
  5. Tempatkan satu atau beberapa titik henti dalam kode sumber. Klik kanan pada baris kode di editor teks pada fungsi atau rutinitas yang ingin Anda debug. Pilih Titik Henti, Sisipkan Titik Henti. Titik henti ditambahkan, menyoroti baris kode berwarna merah.

  6. Di menu Debug , pilih Mulai Penelusuran Kesalahan untuk mengkompilasi, menyebarkan, dan menguji proyek. Skrip pengujian di Test.sql dijalankan, dan objek database terkelola dipanggil.

  7. Saat panah kuning (menunjuk penunjuk instruksi) muncul di titik henti, eksekusi kode akan dijeda. Anda kemudian dapat men-debug objek database terkelola Anda:

    1. Gunakan Langkah Di Atas dari menu Debug untuk memajukan penunjuk instruksi ke baris kode berikutnya.
    2. Gunakan jendela Lokal untuk mengamati status objek yang saat ini disorot oleh penunjuk instruksi.
    3. Tambahkan variabel ke jendela Watch . Anda dapat mengamati status variabel yang diawasi di seluruh sesi debugging, bahkan ketika variabel tidak berada di baris kode yang saat ini disorot oleh penunjuk instruksi.
    4. Pilih Lanjutkan dari menu Debug untuk memajukan penunjuk instruksi ke titik henti berikutnya atau untuk menyelesaikan eksekusi rutinitas jika tidak ada lagi titik henti.

Contoh kode

Contoh berikut mengembalikan versi SQL Server ke pemanggil.

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

Contoh skrip pengujian

Skrip pengujian berikut menunjukkan cara memanggil prosedur tersimpan yang GetVersion ditentukan dalam contoh sebelumnya.

EXEC GetVersion  

Langkah berikutnya

Untuk informasi selengkapnya tentang penelusuran kesalahan kode terkelola menggunakan Visual Studio, lihat Men-debug Kode Terkelola dalam dokumentasi Visual Studio.

Untuk informasi selengkapnya, lihat Konsep pemrograman integrasi Common Language Runtime