Megosztás a következőn keresztül:


CLR-adatbázisobjektumok hibakeresése

A következőkre vonatkozik:SQL Server

Az SQL Server támogatja Transact-SQL és a közös nyelvi futtatókörnyezeti (CLR) objektumok hibakeresését az adatbázisban. Az SQL Server hibakeresésének fő szempontjai a könnyű beállítás és a használat, valamint az SQL Server hibakereső és a Microsoft Visual Studio hibakeresővel való integrációja. Emellett a hibakeresés több nyelven is működik. A felhasználók zökkenőmentesen léphetnek be CLR-objektumokba a Transact-SQL-ből, és fordítva.

Az SQL Server Management Studio Transact-SQL hibakeresője nem használható felügyelt adatbázis-objektumok hibakeresésére, de az objektumokat a Visual Studio hibakeresőivel is hibakereséssel végezheti el. A Visual Studióban a felügyelt adatbázis-objektumok hibakeresése támogatja az összes gyakori hibakeresési funkciót, például lépés a és lépés utasítások felett a kiszolgálón végrehajtott rutinokon belül. A hibakeresők töréspontokat állíthatnak be, megvizsgálhatják a hívásvermet, megvizsgálhatják a változókat, és hibakeresés közben módosíthatják a változóértékeket.

Engedélyek és korlátozások hibakeresése

A hibakeresés magas jogosultsági szintű művelet, ezért az SQL Serverben csak a sysadmin rögzített kiszolgálói szerepkör tagjai tehetik meg ezt.

A hibakeresés során a következő korlátozások érvényesek:

  • A CLR-rutinok hibakeresése egyszerre csak egy hibakereső példányra korlátozódik. Ez a korlátozás azért érvényes, mert az összes CLR-kód végrehajtása lefagy töréspont esetén, és a végrehajtás addig nem folytatódik, amíg a hibakereső nem lép ki a töréspontról. Más kapcsolatokban azonban folytathatja a Transact-SQL hibakeresését. Bár a Transact-SQL hibakeresés nem fagyasztja le a szerveren lévő egyéb végrehajtásokat, a zárolás miatt más kapcsolatok várakozhatnak.

  • A meglévő kapcsolatokat nem lehet hibakeresni, csak az újakat, mivel az SQL Servernek információra van szüksége az ügyfélről és a hibakereső környezetről a kapcsolat létrehozása előtt.

Ezért azt javasoljuk, hogy a Transact-SQL és a CLR-kód hibakeresése ne éles kiszolgálón, hanem tesztkiszolgálón legyen.

Áttekintés

Az SQL Server hibakeresése kapcsolatonkénti modellt követ. A hibakereső csak azon az ügyfélkapcsolaton képes észlelni és elhárítani a hibákat, amelyhez csatlakozik. Mivel a hibakereső funkcióját nem korlátozza a kapcsolat típusa, a táblázatos adatfolyamok (TDS) és a HTTP-kapcsolatok is hibakeresést végezhetnek. Az SQL Server azonban nem engedélyezi a meglévő kapcsolatok hibakeresését. A hibakeresés támogatja a kiszolgálón futtatott rutinok összes gyakori hibakeresési funkcióját. A hibakereső és az SQL Server közötti interakció elosztott összetevő-objektummodellen (COM) keresztül történik.

A felügyelt tárolt eljárások, függvények, eseményindítók, felhasználó által definiált típusok és összesítések hibakeresésével kapcsolatos további információkért és forgatókönyvekért tekintse meg SQL Server CLR integrációs adatbázis hibakeresési a Visual Studio dokumentációjában.

A TCP/IP hálózati protokollt engedélyezni kell az SQL Server-példányon a Visual Studio távoli fejlesztéshez, hibakereséshez és fejlesztéshez való használatához. A TCP/IP protokoll kiszolgálón való engedélyezéséről további információt az Ügyfélprotokollok konfigurálásacímű témakörben talál.

Hibakeresési lépések

A KÖVETKEZŐ lépésekkel hibakeresést végezhet egy CLR-adatbázis-objektumon a Microsoft Visual Studióban:

  1. Nyissa meg a Microsoft Visual Studiót, és hozzon létre egy új SQL Server-projektet. Használhatja a Visual Studiót tartalmazó SQL LocalDB-példányt.

  2. Új SQL CLR-típus (C#) létrehozása:

    1. A Megoldáskezelőbenkattintson a jobb gombbal a projektre, és válassza a hozzáadása, Új elem...lehetőséget.
    2. Az Új elem hozzáadása ablakban válassza SQL CLR C# tárolt eljárás, SQL CLR C# User-Defined függvény, SQL CLR C# User-Defined Típus, SQL CLR C# eseményindító, SQL CLR C# összesítővagy osztály.
    3. Adjon meg egy nevet az új típus forrásfájljának, majd válassza a következőt: Hozzáad.
  3. Adja hozzá az új típus kódját a szövegszerkesztőhöz. Egy példaként tárolt eljárás mintakódját a jelen cikk alábbi Példa szakaszában találja.

  4. Adjon hozzá egy szkriptet, amely teszteli a típust:

    1. A Megoldáskezelőbenkattintson a jobb gombbal a projektcsomópontra, és válassza hozzáadása, Szkript....
    2. Az Új elem hozzáadása ablakban válassza a Szkript (Nincs a buildben)lehetőséget, és adjon meg egy nevet, például Test.sql. Válassza a hozzáadása gombot.
    3. A Megoldáskezelőkattintson duplán a Test.sql csomópontra az alapértelmezett tesztszkript forrásfájljának megnyitásához.
    4. Adja hozzá a tesztszkriptet (amely meghívja a hibakeresésre szolgáló kódot) a szövegszerkesztőbe. Tekintse meg a példaszkriptet a következő szakaszban.
  5. Helyezzen el egy vagy több töréspontot a forráskódban. Kattintson a jobb gombbal a hibakereséshez használni kívánt függvény vagy rutin szövegszerkesztőjének kódsorára. Válassza a Töréspontlehetőséget, és szúrja be a Töréspontlehetőséget. Ekkor megjelenik a töréspont, amely piros színnel emeli ki a kódsort.

  6. A Hibakeresés menüben válassza a Hibakeresés indítása a projekt fordításához, üzembe helyezéséhez és teszteléséhez. Az Test.sql tesztszkriptje fut, és a rendszer meghívja a felügyelt adatbázis-objektumot.

  7. Amikor megjelenik a sárga nyíl (az utasításmutató kiosztása) a töréspontnál, a kódvégrehajtás szünetel. Ezután hibakeresést végezhet a felügyelt adatbázis-objektumon:

    1. A Hibakeresési menü Step Over parancsának használatával vigye az utasításmutatót a következő kódsorra.
    2. A Helyiek ablakban figyelje meg az utasításmutató által jelenleg kiemelt objektumok állapotát.
    3. Adjon hozzá változókat a Watch ablakhoz. Megfigyelheti a megfigyelt változók állapotát a hibakeresési munkamenet során, még akkor is, ha a változó nem az utasításmutató által jelenleg kiemelt kódsoron van.
    4. Válassza a Folytatás lehetőséget a Hibakeresés menüből, hogy az utasításmutatót a következő töréspontra vigye, vagy ha nincs több töréspont, végezze el a rutin végrehajtását.

Példakód

Az alábbi C#-példa az SQL Server verzióját adja vissza a hívónak.

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

Példa tesztszkript

Az alábbi tesztszkript bemutatja, hogyan hívhatja meg az előző példában definiált GetVersion tárolt eljárást.

EXECUTE GetVersion;