Festlegen von Eigenschaften – SMO

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse Analytics

Eigenschaften sind Werte, die aussagekräftige Informationen über das Objekt speichern. Microsoft SQL Server Konfigurationsoptionen werden beispielsweise durch die Configuration Eigenschaften des Objekts dargestellt. Auf Eigenschaften kann mit der Eigenschaftsauflistung entweder direkt oder indirekt zugegriffen werden. Für den direkten Zugriff auf Eigenschaften wird die folgende Syntax verwendet:

objInstance.PropertyName

Ein Eigenschaftswert kann geändert oder abgerufen werden. Dies hängt davon ab, ob die Eigenschaft Lese-/Schreibzugriff hat oder schreibgeschützt ist. Bevor ein Objekt erstellt wird, müssen bestimmte Eigenschaften festgelegt werden. Weitere Informationen finden Sie in der SMO-Referenz für das entsprechende Objekt.

Hinweis

Auflistungen von untergeordneten Objekten werden als Eigenschaft eines Objekts angezeigt. Die Tables -Auflistung ist beispielsweise eine Eigenschaft eines Server -Objekts. Weitere Informationen finden Sie unter Using Collections.

Die Eigenschaften eines Objekts sind Mitglieder einer Eigenschaftsauflistung. Mithilfe der Eigenschaftsauflistung kann jede Eigenschaft eines Objekts durchlaufen werden.

Mitunter ist eine Eigenschaft aus den folgenden Gründen nicht verfügbar:

  • Die Serverversion unterstützt die -Eigenschaft nicht, z. B. wenn Sie versuchen, auf eine Eigenschaft zuzugreifen, die eine neue SQL Server-Funktion in einer älteren Version von SQL Server darstellt.

  • Der Server stellt keine Daten für die Eigenschaft bereit, z. B. wenn Sie versuchen, auf eine Eigenschaft zuzugreifen, die eine nicht installierte SQL Server Komponente darstellt.

Sie können diese Situationen bewältigen, indem Sie die UnknownPropertyException- und die PropertyCannotBeRetrievedException SMO-Ausnahmen abfangen.

Festlegen von Standardinitialisierungsfeldern

Beim Abrufen von Objekten führt SMO eine Optimierung aus. Die Optimierung minimiert die Anzahl von Eigenschaften, die durch automatisches Skalieren zwischen den folgenden Status geladen werden:

  1. Teilweise geladen. Wenn auf ein Objekt erstmalig verwiesen wird, steht ein Minimum an Eigenschaften zur Verfügung (z. B. Name und Schema).

  2. Vollständig geladen. Wenn auf eine Eigenschaft verwiesen wird, werden die übrigen Eigenschaften, die schnell geladen werden können, initialisiert und zur Verfügung gestellt.

  3. Eigenschaften, die viel Arbeitsspeicher in Anspruch nehmen. Die übrigen nicht verfügbaren Eigenschaften nehmen viel Arbeitsspeicher in Anspruch und haben den Expensive-Eigenschaftswert TRUE (z. B. DataSpaceUsage). Diese Eigenschaften werden nur geladen, wenn auf sie ausdrücklich verwiesen wird.

Wenn Ihre Anwendung zusätzliche Eigenschaften zu den im teilweise geladenen Status verfügbaren Eigenschaften abruft, übermittelt sie eine Abfrage zum Abrufen dieser zusätzlichen Eigenschaften und wechselt in den vollständig geladenen Status. Dies kann unnötigen Datenverkehr zwischen dem Client und dem Server verursachen. Eine weitere Optimierung kann durch Aufrufen der SetDefaultInitFields-Methode erzielt werden. Die SetDefaultInitFields-Methode ermöglicht die Angabe der Eigenschaften, die beim Initialisieren des Objekts geladen werden.

Die SetDefaultInitFields-Methode legt das Verhalten zum Laden von Eigenschaften für die restliche Anwendung oder bis zum Zurücksetzen der Anwendung fest. Sie können das ursprüngliche Verhalten mit der GetDefaultInitFields-Methode speichern und es nach Bedarf wiederherstellen.

Beispiele

Zum Verwenden eines angegebenen Codebeispiels müssen Sie die Programmierumgebung, Programmiervorlage und die zu verwendende Programmiersprache auswählen, um Ihre Anwendung zu erstellen. Weitere Informationen finden Sie unter Erstellen eines Visual C#-SMO-Projekts in Visual Studio .NET.

Abrufen und Festlegen einer Eigenschaft in Visual Basic

In diesem Codebeispiel wird gezeigt, wie die Edition -Eigenschaft des Information -Objekts abgerufen und die Eigenschaft der ConnectionContext -Eigenschaft auf den ExecuteSql-Member des SqlExecutionModes aufgezählten Typs festgelegt SqlExecutionModes wird.

'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

Abrufen und Festlegen einer Eigenschaft in Visual C#

In diesem Codebeispiel wird gezeigt, wie die Edition -Eigenschaft des Information -Objekts abgerufen und die Eigenschaft der ConnectionContext -Eigenschaft auf den ExecuteSql-Member des SqlExecutionModes aufgezählten Typs festgelegt SqlExecutionModes wird.

{   
//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;   
}  

Festlegen von verschiedenen Eigenschaften vor dem Erstellen eines Objekts in Visual Basic

Dieses Codebeispiel zeigt, wie die AnsiNullsStatus-Eigenschaft des Table-Objekts direkt festgelegt wird und wie Spalten erstellt und hinzugefügt werden, bevor Sie das Table-Objekt erstellen.

'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()

Festlegen von verschiedenen Eigenschaften vor dem Erstellen eines Objekts in Visual C#

Dieses Codebeispiel zeigt, wie die AnsiNullsStatus-Eigenschaft des Table-Objekts direkt festgelegt wird und wie Spalten erstellt und hinzugefügt werden, bevor Sie das Table-Objekt erstellen.

{   
//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();   
}  

Durchlaufen aller Eigenschaften eines Objekts in Visual Basic

In diesem Codebeispiel wird die Properties-Auflistung des StoredProcedure Objekts durchlaufen und auf dem Visual Studio-Bildschirm Ausgabe angezeigt.

Im Beispiel wurde das Property Objekt in quadratische Klammern eingefügt, da es sich auch um ein Visual Basic-Schlüsselwort handelt.

'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

Durchlaufen aller Eigenschaften eines Objekts in Visual C#

In diesem Codebeispiel wird die Properties-Auflistung des StoredProcedure Objekts durchlaufen und auf dem Visual Studio-Bildschirm Ausgabe angezeigt.

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Set properties on the uspGetEmployeedManagers 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);   
  }   
}  

Festlegen von Standardinitialisierungsfeldern in Visual Basic

In diesem Codebeispiel wird gezeigt, wie die Anzahl der in einem SMO-Programm initialisierten Objekteigenschaften minimiert wird. Sie müssen die using System.Collections.Specialized-Anweisung einschließen, um das StringCollection-Objekt zu verwenden.

SQL Server Profiler können verwendet werden, um die an die Instanz von SQL Server gesendeten Zahlenanweisungen mit dieser Optimierung zu vergleichen.

'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)

Festlegen von Standardinitialisierungsfeldern in Visual C#

In diesem Codebeispiel wird gezeigt, wie die Anzahl der in einem SMO-Programm initialisierten Objekteigenschaften minimiert wird. Sie müssen die using System.Collections.Specialized-Anweisung einschließen, um das StringCollection-Objekt zu verwenden.

SQL Server Profiler können verwendet werden, um die an die Instanz von SQL Server gesendeten Zahlenanweisungen mit dieser Optimierung zu vergleichen.

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