Freigeben über


Festlegen von Eigenschaften

Eigenschaften sind Werte, die beschreibende Informationen zum Objekt speichern. Microsoft SQL Server-Konfigurationsoptionen werden beispielsweise durch die Eigenschaften des Configuration Objekts dargestellt. Auf Eigenschaften kann entweder direkt oder indirekt mithilfe der Eigenschaftsauflistung zugegriffen werden. Beim direkten Zugreifen auf Eigenschaften wird die folgende Syntax verwendet:

objInstance.PropertyName

Ein Eigenschaftswert kann geändert oder abgerufen werden, je nachdem, ob die Eigenschaft Lese-/Schreibzugriff oder schreibgeschützten Zugriff hat. Es ist auch erforderlich, bestimmte Eigenschaften festzulegen, bevor ein Objekt erstellt werden kann. Weitere Informationen finden Sie in der SMO-Referenz für das jeweilige Objekt.

Hinweis

Auflistungen untergeordneter Objekte werden als Eigenschaft eines Objekts angezeigt. Die Auflistung ist beispielsweise Tables eine Eigenschaft eines Server Objekts. Weitere Informationen finden Sie unter Verwenden von Sammlungen.

Die Eigenschaften eines Objekts sind Elemente der Properties-Auflistung. Die Properties-Auflistung kann verwendet werden, um jede Eigenschaft eines Objekts zu durchlaufen.

Manchmal 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 ein neues SQL Server-Feature 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 Umstände behandeln, indem Sie die UnknownPropertyException SMO-Ausnahmen PropertyCannotBeRetrievedException abfangen.

Festlegen von Standardinitialisierungsfeldern

SMO führt beim Abrufen von Objekten eine Optimierung durch. Die Optimierung minimiert die Anzahl der geladenen Eigenschaften, indem sie automatisch zwischen den folgenden Zuständen skaliert wird:

  1. Teilweise geladen. Wenn auf ein Objekt zuerst verwiesen wird, steht mindestens eine Eigenschaft zur Verfügung (z. B. Name und Schema).

  2. Vollständig geladen. Wenn auf eine Eigenschaft verwiesen wird, werden die verbleibenden Eigenschaften, die schnell geladen werden können, initialisiert und verfügbar gemacht.

  3. Eigenschaften, die viel Arbeitsspeicher verwenden. Die verbleibenden nicht verfügbaren Eigenschaften verwenden viel Arbeitsspeicher und weisen einen Expensive Eigenschaftswert von true auf (z. B DataSpaceUsage. ). Diese Eigenschaften werden nur geladen, wenn ausdrücklich darauf verwiesen wird.

Wenn Ihre Anwendung zusätzliche Eigenschaften abruft, werden neben den im teilweise geladenen Zustand bereitgestellten Eigenschaften eine Abfrage gesendet, um diese zusätzlichen Eigenschaften abzurufen und bis zum vollständig geladenen Zustand zu skalieren. Dies kann zu unnötigem Datenverkehr zwischen Client und Server führen. Durch Aufrufen der SetDefaultInitFields Methode kann eine weitere Optimierung erreicht werden. Die SetDefaultInitFields Methode ermöglicht die Spezifikation der Eigenschaften, die beim Initialisieren des Objekts geladen werden.

Die SetDefaultInitFields Methode legt das Ladeverhalten der Eigenschaft für den Rest der Anwendung oder bis zum Zurücksetzen fest. Sie können das ursprüngliche Verhalten mithilfe der GetDefaultInitFields Methode speichern und nach Bedarf wiederherstellen.

Beispiele

Um ein codebeispiel zu verwenden, das bereitgestellt wird, müssen Sie die Programmierumgebung, die Programmiervorlage und die Programmiersprache auswählen, in der Ihre Anwendung erstellt werden soll. Weitere Informationen finden Sie unter "How to: Create a Visual Basic SMO Project in Visual Studio .NET" oder "How to: Create a Visual C# SMO Project in Visual Studio .NET" in SQL Server Books Online.

Abrufen und Festlegen einer Eigenschaft in Visual Basic

In diesem Codebeispiel wird veranschaulicht, wie die Edition Eigenschaft des Information Objekts abgerufen und die SqlExecutionModes Eigenschaft der ConnectionContext Eigenschaft auf das ExecuteSql Element des SqlExecutionModes Enumerationstyps festgelegt wird.

Abrufen und Festlegen einer Eigenschaft in Visual C#

In diesem Codebeispiel wird veranschaulicht, 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 verschiedener Eigenschaften vor dem Erstellen eines Objekts in Visual Basic

In diesem Codebeispiel wird gezeigt, wie Sie die AnsiNullsStatus Eigenschaft des Table Objekts direkt festlegen und wie Sie Spalten erstellen und hinzufügen, bevor Sie das Table Objekt erstellen.

Festlegen verschiedener Eigenschaften vor dem Erstellen eines Objekts in Visual C#

In diesem Codebeispiel wird gezeigt, wie Sie die AnsiNullsStatus Eigenschaft des Table Objekts direkt festlegen und wie Sie Spalten erstellen und hinzufügen, 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 AdventureWorks2012 database.   
Database db;   
db = srv.Databases("AdventureWorks2012");   
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-Ausgabebildschirm angezeigt.

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

Durchlaufen aller Eigenschaften eines Objekts in Visual C#

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

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Set properties on the uspGetEmployeedManagers stored procedure on the AdventureWorks2012 database.   
Database db;   
db = srv.Databases("AdventureWorks2012");   
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 veranschaulicht, wie die Anzahl der objekteigenschaften minimiert wird, die in einem SMO-Programm initialisiert wurden. 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 Anzahlanweisungen zu vergleichen, die mit dieser Optimierung an die Instanz von SQL Server gesendet werden.

Festlegen von Standardinitialisierungsfeldern in Visual C#

In diesem Codebeispiel wird veranschaulicht, wie die Anzahl der objekteigenschaften minimiert wird, die in einem SMO-Programm initialisiert wurden. 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 Anzahlanweisungen zu vergleichen, die mit dieser Optimierung an die Instanz von SQL Server gesendet werden.

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