Freigeben über


Festlegen von Eigenschaften

Eigenschaften sind Werte, die aussagekräftige Informationen über das Objekt speichern. Zum Beispiel werden MicrosoftSQL Server-Konfigurationsoptionen durch die Eigenschaften des Configuration-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.

HinweisHinweis

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 Verwenden von Auflistungen.

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, die ein neues SQL Server-Feature darstellt, in einer älteren Version von SQL Server zuzugreifen.

  • Der Server stellt keine Daten für die Eigenschaft zur Verfügung, z. B. wenn Sie versuchen auf eine Eigenschaft zuzugreifen, die eine SQL Server Komponente darstellt, die nicht installiert ist.

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

Um die bereitgestellten Codebeispiele verwenden zu können, müssen Sie die Programmierumgebung, die Programmiervorlage und die Programmiersprache wählen, in der die Anwendung erstellt werden soll. Weitere Informationen finden Sie in der SQL Server-Onlinedokumentation unter "Vorgehensweise: Erstellen eines Visual Basic SMO-Projekts in Visual Studio .NET" oder "Vorgehensweise: 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 SqlExecutionModes-Eigenschaft der ConnectionContext-Eigenschaft auf das ExecuteSql-Element des SqlExecutionModes-Enumerationstyps festgelegt 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 SqlExecutionModes-Eigenschaft der ConnectionContext-Eigenschaft auf das ExecuteSql-Element des SqlExecutionModes-Enumerationstyps festgelegt 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

In diesem Codebeispiel wird gezeigt, 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 AdventureWorks database. 
Dim db As Database
db = srv.Databases("AdventureWorks")
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#

In diesem Codebeispiel wird gezeigt, 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 AdventureWorks database. 
Dim db As Database
db = srv.Databases("AdventureWorks")
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()
{ 
//Connect to the local, default instance of SQL Server. 
Server srv; 
srv = new Server(); 
//Create a new table in the AdventureWorks database. 
Database db; 
db = srv.Databases("AdventureWorks"); 
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 die Werte werden im Ausgabefenster von Visual Studio angezeigt.

Im Beispiel wurde das Property-Objekt in eckige Klammern gesetzt, da es auch ein Visual Basic-Schlüsselwort ist.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Set properties on the uspGetEmployeedManagers stored procedure on the AdventureWorks database.
Dim db As Database
db = srv.Databases("AdventureWorks")
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 die Werte werden im Ausgabefenster von Visual Studio angezeigt.

{ 
//Connect to the local, default instance of SQL Server. 
Server srv; 
srv = new Server(); 
//Set properties on the uspGetEmployeedManagers stored procedure on the AdventureWorks database. 
Database db; 
db = srv.Databases("AdventureWorks"); 
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 kann verwendet werden, um die mit dieser Optimierung an die Instanz von SQL Server gesendeten Zahlenanweisungen zu vergleichen.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Reference the AdventureWorks database.
Dim db As Database
db = srv.Databases("AdventureWorks")
'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 AdventureWorks.
'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 kann verwendet werden, um die mit dieser Optimierung an die Instanz von SQL Server gesendeten Zahlenanweisungen zu vergleichen.

{ 
//Connect to the local, default instance of SQL Server. 
Server srv; 
srv = new Server(); 
//Reference the AdventureWorks database. 
Database db; 
db = srv.Databases("AdventureWorks"); 
//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 AdventureWorks. 
   //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); 
}