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


SMO-kivételek kezelése

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-adatbázis a Microsoft Fabricben

A felügyelt kódban a rendszer kivételeket ad, ha hiba történik. Az SMO-metódusok és -tulajdonságok nem jelentik a visszatérési érték sikerességét vagy sikertelenségét. Ehelyett a kivételeket egy kivételkezelő képes elkapni és kezelni.

Az SMO-ban különböző kivételosztályok léteznek. A kivételre vonatkozó információk kinyerhetők a kivétel tulajdonságaiból, például az Üzenet tulajdonságból, amely szöveges üzenetet ad a kivételről.

A kivételkezelési utasítások a programozási nyelvre vonatkoznak. A Microsoft Visual Basicben például a Catch utasítás.

Belső kivételek

A kivételek lehetnek általánosak vagy specifikusak. Az általános kivételek bizonyos kivételeket tartalmaznak. Számos catch utasítás használható a várt hibák kezelésére, és lehetővé teszi, hogy a fennmaradó hibák átesjenek az általános kivételkezelési kódba. A kivételek gyakran kaszkádolt sorrendben fordulnak elő. Gyakran előfordulhat, hogy egy SMO-kivételt SQL-kivétel okozott. Ennek észleléséhez az InnerException tulajdonság egymást követő használatával határozza meg a végleges legfelső szintű kivételt okozó eredeti kivételt.

Note

Az SQLException kivétel a System.Data.SqlClient névtérben van deklarálva.

Diagram, amely azokat a szinteket mutatja be, amelyekből a kivételt

Az ábrán a kivételek folyamata látható az alkalmazás rétegei között.

Example

A megadott kód példájának használatához ki kell választania a programozási környezetet, a programozási sablont és azt a programozási nyelvet, amelyben létre szeretné hozni az alkalmazást. További információ: Visual C# SMO-projekt létrehozása a Visual Studio .NET-.

Kivétel fogása a Visual Basicben

Ez a példakód bemutatja, hogyan használható a Try... Elkap... VégülVisual Basic utasítás egy SMO-kivétel elfogásához. Minden SMO-kivétel SmoException típusú, és szerepel az SMO-hivatkozásban. A belső kivételek sorozata jelenik meg a hiba gyökerének megjelenítéséhez. További információkért tekintse meg a Visual Basic .NET dokumentációját.

'This sample requires the Microsoft.SqlServer.Management.Smo.Agent namespace is included.
'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Define an Operator object variable by supplying the parent SQL Agent and the name arguments in the constructor.
'Note that the Operator type requires [] parenthesis to differentiate it from a Visual Basic key word.
Dim op As [Operator]
op = New [Operator](srv.JobServer, "Test_Operator")
op.Create()
'Start exception handling.
Try
    'Create the operator again to cause an SMO exception.
    Dim opx As OperatorCategory
    opx = New OperatorCategory(srv.JobServer, "Test_Operator")
    opx.Create()
    'Catch the SMO exception
Catch smoex As SmoException
    Console.WriteLine("This is an SMO Exception")
    'Display the SMO exception message.
    Console.WriteLine(smoex.Message)
    'Display the sequence of non-SMO exceptions that caused the SMO exception.
    Dim ex As Exception
    ex = smoex.InnerException
    Do While ex.InnerException IsNot (Nothing)
        Console.WriteLine(ex.InnerException.Message)
        ex = ex.InnerException
    Loop
    'Catch other non-SMO exceptions.
Catch ex As Exception
    Console.WriteLine("This is not an SMO exception.")
End Try

Kivétel észlelése a Visual C-ben#

Ez a példakód bemutatja, hogyan használható a Try... Elkap... Végül a Visual C# utasítással észlelhet egy SMO-kivételt. Minden SMO-kivétel SmoException típusú, és szerepel az SMO-hivatkozásban. A belső kivételek sorozata jelenik meg a hiba gyökerének megjelenítéséhez. További információkért tekintse meg a Visual C# dokumentációját.

{   
//This sample requires the Microsoft.SqlServer.Management.Smo.Agent namespace to be included.   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Define an Operator object variable by supplying the parent SQL Agent and the name arguments in the constructor.   
//Note that the Operator type requires [] parenthesis to differentiate it from a Visual Basic key word.   
op = new Operator(srv.JobServer, "Test_Operator");   
op.Create();   
//Start exception handling.   
try {   
    //Create the operator again to cause an SMO exception.   
    OperatorCategory opx;   
    opx = new OperatorCategory(srv.JobServer, "Test_Operator");   
    opx.Create();   
}   
//Catch the SMO exception   
catch (SmoException smoex) {   
    Console.WriteLine("This is an SMO Exception");   
   //Display the SMO exception message.   
   Console.WriteLine(smoex.Message);   
   //Display the sequence of non-SMO exceptions that caused the SMO exception.   
   Exception ex;   
   ex = smoex.InnerException;   
   while (!object.ReferenceEquals(ex.InnerException, (null))) {   
      Console.WriteLine(ex.InnerException.Message);   
      ex = ex.InnerException;   
    }   
    }   
   //Catch other non-SMO exceptions.   
   catch (Exception ex) {   
      Console.WriteLine("This is not an SMO exception.");   
}   
}