Sdílet prostřednictvím


Nastavení vlastností – SMO

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analyticssql database v Microsoft Fabric

Vlastnosti jsou hodnoty, které ukládají popisné informace o objektu. Například možnosti konfigurace Microsoft SQL Serveru jsou reprezentovány vlastnostmi Configuration objektu. K vlastnostem lze přistupovat přímo nebo nepřímo pomocí kolekce vlastností. Přímý přístup k vlastnostem používá následující syntaxi:

objInstance.PropertyName

Hodnotu vlastnosti je možné upravit nebo načíst v závislosti na tom, jestli má vlastnost přístup pro čtení a zápis nebo přístup jen pro čtení. Před vytvořením objektu je také nutné nastavit určité vlastnosti. Další informace naleznete v odkazu SMO pro konkrétní objekt.

Note

Kolekce podřízených objektů se zobrazují jako vlastnost objektu. Například kolekce Tables je vlastnost objektu serveru . Další informace naleznete v tématu Použití kolekcí.

Vlastnosti objektu jsou členy kolekce Properties. Kolekci Properties lze použít k iteraci všemi vlastnostmi objektu.

Někdy není vlastnost k dispozici z následujících důvodů:

  • Verze serveru tuto vlastnost nepodporuje, například pokud se pokusíte získat přístup k vlastnosti, která představuje novou funkci SQL Serveru ve starší verzi SQL Serveru.

  • Server neposkytuje data pro vlastnost, například pokud se pokusíte získat přístup k vlastnosti, která představuje komponentu SYSTÉMU SQL Server, která není nainstalována.

Tyto okolnosti můžete zpracovat zachycením UnknownPropertyException výjimek SMO a PropertyCannotBeRetrievedException SMO.

Nastavení výchozích polí inicializace

SMO provádí optimalizaci při načítání objektů. Optimalizace minimalizuje počet vlastností načtených automatickým škálováním mezi následujícími stavy:

  1. Částečně nabité. Když je objekt poprvé odkazován, má k dispozici minimálně vlastnosti (například Název a Schéma).

  2. Plně nabité. Když se na některou vlastnost odkazuje, zbývající vlastnosti, které se rychle načítají, se inicializují a zpřístupní se.

  3. Vlastnosti, které používají velké množství paměti. Zbývající nedostupné vlastnosti používají velké množství paměti a mají Expensive hodnotu vlastnosti true (například DataSpaceUsage). Tyto vlastnosti se načtou pouze v případech, kdy se na tyto vlastnosti odkazuje.

Pokud vaše aplikace načítá další vlastnosti kromě vlastností zadaných v částečně načteném stavu, odešle dotaz, který načte tyto další vlastnosti a vertikálně navýší kapacitu na plně načtený stav. To může způsobit zbytečný provoz mezi klientem a serverem. Větší optimalizaci lze dosáhnout voláním SetDefaultInitFields metody. Metoda SetDefaultInitFields umožňuje specifikaci vlastností, které jsou načteny při inicializaci objektu.

Metoda SetDefaultInitFields nastaví chování načítání vlastnosti pro zbytek aplikace nebo dokud se resetuje. Původní chování můžete uložit pomocí GetDefaultInitFields metody a podle potřeby ji obnovit.

Examples

Pokud chcete použít libovolný zadaný příklad kódu, budete muset zvolit programovací prostředí, programovací šablonu a programovací jazyk, ve kterém chcete vytvořit aplikaci. Další informace najdete v tématu Vytvoření projektu SMO visual C# v sadě Visual Studio .NET.

Získání a nastavení vlastnosti v jazyce Visual Basic

Tento příklad kódu ukazuje, jak získat Edition vlastnost Information objektu a jak nastavit SqlExecutionModes vlastnost ConnectionContextvlastnosti ExecuteSql členu výčtu SqlExecutionModes typu.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Get a property.
Console.WriteLine(srv.Information.Version)
'Set a property.
srv.ConnectionContext.SqlExecutionModes = SqlExecutionModes.ExecuteSql

Získání a nastavení vlastnosti v jazyce Visual C#

Tento příklad kódu ukazuje, jak získat Edition vlastnost Information objektu a jak nastavit SqlExecutionModes vlastnost ConnectionContextvlastnosti ExecuteSql členu výčtu SqlExecutionModes typu.

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Get a property.   
Console.WriteLine(srv.Information.Version);   
//Set a property.   
srv.ConnectionContext.SqlExecutionModes = SqlExecutionModes.ExecuteSql;   
}  

Nastavení různých vlastností před vytvořením objektu v jazyce Visual Basic

Tento příklad kódu ukazuje, jak přímo nastavit AnsiNullsStatus vlastnost objektu Table a jak vytvořit a přidat sloupce před vytvořením objektu Table .

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Create a new table in the AdventureWorks2022 database. 
Dim db As Database
db = srv.Databases("AdventureWorks2022")
Dim tb As Table
'Specify the parent database, table schema and the table name in the constructor.
tb = New Table(db, "Test_Table", "HumanResources")
'Add columns because the table requires columns before it can be created. 
Dim c1 As Column
'Specify the parent table, the column name and data type in the constructor.
c1 = New Column(tb, "ID", DataType.Int)
tb.Columns.Add(c1)
c1.Nullable = False
c1.Identity = True
c1.IdentityIncrement = 1
c1.IdentitySeed = 0
Dim c2 As Column
c2 = New Column(tb, "Name", DataType.NVarChar(100))
c2.Nullable = False
tb.Columns.Add(c2)
tb.AnsiNullsStatus = True
'Create the table on the instance of SQL Server.
tb.Create()

Nastavení různých vlastností před vytvořením objektu v jazyce Visual C#

Tento příklad kódu ukazuje, jak přímo nastavit AnsiNullsStatus vlastnost objektu Table a jak vytvořit a přidat sloupce před vytvořením objektu Table .

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Create a new table in the AdventureWorks2022 database.   
Database db;   
db = srv.Databases["AdventureWorks2022"];   
Table tb;   
//Specify the parent database, table schema, and the table name in the constructor.   
tb = new Table(db, "Test_Table", "HumanResources");   
//Add columns because the table requires columns before it can be created.   
Column c1;   
//Specify the parent table, the column name, and data type in the constructor.   
c1 = new Column(tb, "ID", DataType.Int);   
tb.Columns.Add(c1);   
c1.Nullable = false;   
c1.Identity = true;   
c1.IdentityIncrement = 1;   
c1.IdentitySeed = 0;   
Column c2;   
c2 = new Column(tb, "Name", DataType.NVarChar(100));   
c2.Nullable = false;   
tb.Columns.Add(c2);   
tb.AnsiNullsStatus = true;   
//Create the table on the instance of SQL Server.   
tb.Create();   
}  

Iterace všemi vlastnostmi objektu v jazyce Visual Basic

Tento příklad kódu iteruje kolekci Properties objektu StoredProcedure a zobrazí je na obrazovce Výstup sady Visual Studio.

V příkladu Property byl objekt vložen do čtvercových závorek, protože se jedná také o klíčové slovo jazyka Visual Basic.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Set properties on the uspGetEmployeeManagers stored procedure on the AdventureWorks2022 database.
Dim db As Database
db = srv.Databases("AdventureWorks2022")
Dim sp As StoredProcedure
sp = db.StoredProcedures("uspGetEmployeeManagers")
sp.AnsiNullsStatus = False
sp.QuotedIdentifierStatus = False
'Iterate through the properties of the stored procedure and display.
'Note the Property object requires [] parentheses to distinguish it from the Visual Basic key word.
Dim p As [Property]
For Each p In sp.Properties
    Console.WriteLine(p.Name & p.Value)
Next

Iterace všemi vlastnostmi objektu v jazyce Visual C#

Tento příklad kódu iteruje kolekci Properties objektu StoredProcedure a zobrazí je na obrazovce Výstup sady Visual Studio.

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Set properties on the uspGetEmployeeManagers stored procedure on the AdventureWorks2022 database.   
Database db;   
db = srv.Databases["AdventureWorks2022"];   
StoredProcedure sp;   
sp = db.StoredProcedures("uspGetEmployeeManagers");   
sp.AnsiNullsStatus = false;   
sp.QuotedIdentifierStatus = false;   
//Iterate through the properties of the stored procedure and display.   
  Property p;   
  foreach ( p in sp.Properties) {   
    Console.WriteLine(p.Name + p.Value);   
  }   
}  

Nastavení výchozích inicializačních polí v jazyce Visual Basic

Tento příklad kódu ukazuje, jak minimalizovat počet vlastností objektu inicializovaných v programu SMO. Abyste mohli objekt použítusing System.Collections.Specialized, musíte zahrnout StringCollectionpříkaz ; .

Sql Server Profiler lze použít k porovnání čísel příkazů odesílaných do instance SQL Serveru s touto optimalizací.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Reference the AdventureWorks2022 database.
Dim db As Database
db = srv.Databases("AdventureWorks2022")
'Assign the Table object type to a System.Type object variable.
Dim tb As Table
Dim typ As Type
tb = New Table
typ = tb.GetType
'Assign the current default initialization fields for the Table object type to a 
'StringCollection object variable.
Dim sc As StringCollection
sc = srv.GetDefaultInitFields(typ)
'Set the default initialization fields for the Table object type to the CreateDate property.
srv.SetDefaultInitFields(typ, "CreateDate")
'Retrieve the Schema, Name, and CreateDate properties for every table in AdventureWorks2022.
'Note that the improvement in performance can be viewed in SQL Profiler.
For Each tb In db.Tables
    Console.WriteLine(tb.Schema + "." + tb.Name + " " + tb.CreateDate)
Next
'Set the default initialization fields for the Table object type back to the original settings.
srv.SetDefaultInitFields(typ, sc)

Nastavení výchozích inicializačních polí v jazyce Visual C#

Tento příklad kódu ukazuje, jak minimalizovat počet vlastností objektu inicializovaných v programu SMO. Abyste mohli objekt použítusing System.Collections.Specialized, musíte zahrnout StringCollectionpříkaz ; .

Sql Server Profiler lze použít k porovnání čísel příkazů odesílaných do instance SQL Serveru s touto optimalizací.

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Reference the AdventureWorks2022 database.   
Database db;   
db = srv.Databases["AdventureWorks2022"];   
//Assign the Table object type to a System.Type object variable.   
Table tb;   
Type typ;   
tb = new Table();   
typ = tb.GetType;   
//Assign the current default initialization fields for the Table object type to a   
//StringCollection object variable.   
StringCollection sc;   
sc = srv.GetDefaultInitFields(typ);   
//Set the default initialization fields for the Table object type to the CreateDate property.   
srv.SetDefaultInitFields(typ, "CreateDate");   
//Retrieve the Schema, Name, and CreateDate properties for every table in AdventureWorks2022.   
   //Note that the improvement in performance can be viewed in SQL Server Profiler.   
foreach ( tb in db.Tables) {   
   Console.WriteLine(tb.Schema + "." + tb.Name + " " + tb.CreateDate);   
}   
//Set the default initialization fields for the Table object type back to the original settings.   
srv.SetDefaultInitFields(typ, sc);   
}