Установка свойств в SMO

Область применения:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics

Свойства — это значения, которые хранят описательные сведения об объекте. Например, параметры конфигурации Microsoft SQL Server представлены свойствами Configuration объекта. К свойствам можно получать как прямой, так и косвенный доступ при помощи коллекции свойств. Для прямого доступа к свойствам используется следующий синтаксис:

objInstance.PropertyName

Значение свойства можно изменить или получить в зависимости от того, доступно ли свойство для чтения и записи или только для чтения. Кроме того, некоторые свойства необходимо задавать перед тем, как можно будет создать объект. Дополнительные сведения о конкретном объекте см. в справочнике по объектам SMO.

Заметка

Коллекции дочерних объектов отображаются в виде свойства объекта. Например, коллекция Tables является свойством объекта Server . Дополнительные сведения см. в разделе Using Collections.

Свойства объекта являются элементами коллекции Properties. С помощью коллекции Properties можно просматривать все свойства объекта.

Иногда свойство недоступно по следующим причинам.

  • Версия сервера не поддерживает свойство, например, если вы пытаетесь получить доступ к свойству, представляющего новую функцию SQL Server в более старой версии SQL Server.

  • Сервер не предоставляет данные для свойства, например при попытке получить доступ к свойству, представляющего компонент SQL Server, который не установлен.

Обрабатывать эти ситуации можно путем перехвата исключений SMO UnknownPropertyException и PropertyCannotBeRetrievedException.

Задание полей инициализации по умолчанию

При получении объектов SMO выполняет оптимизацию. Оптимизация заключается в сведении к минимуму загружаемых свойств за счет автоматического масштабирования между следующими состояниями.

  1. Частично загружено. При первой ссылке на объект выдается минимум свойств (например, имя и схема).

  2. Полностью загружено. При ссылке на любое свойство остальные свойства, которые можно быстро загрузить, инициализируются и делаются доступными.

  3. Свойства, использующие много памяти. Остальные недоступные свойства используют значительный объем памяти, а свойство Expensive в них имеет значение TRUE (например, DataSpaceUsage). Эти свойства загружаются только тогда, когда на них производится ссылка.

Если приложение загружает дополнительные свойства помимо тех, которые представлены в состоянии частичной загрузки, оно отправляет запрос для получения этих дополнительных свойств и масштабируется до состояния полной загрузки. Это может привести к образованию ненужного трафика между клиентом и сервером. Дополнительную оптимизацию можно достичь за счет вызова метода SetDefaultInitFields. Метод SetDefaultInitFields позволяет создавать спецификацию свойств, которые загружаются при инициализации объекта.

Метод SetDefaultInitFields задает поведение при загрузке свойств для остальной части приложения или до его сброса. Первоначальное поведение можно сохранить с помощью метода GetDefaultInitFields и восстановить его при необходимости.

Примеры

Чтобы использовать какой-либо из представленных примеров кода, нужно выбрать среду, шаблон и язык программирования, с помощью которых будет создаваться приложение. Дополнительные сведения см. в статье "Создание проекта SMO Visual C# в Visual Studio .NET".

Возвращение и задание свойства на языке Visual Basic

В этом примере кода показано, как получить Edition свойство Information объекта и как задать SqlExecutionModes свойство свойства ConnectionContext свойства элементу SqlExecutionModes ExecuteSql перечисленного типа.

'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

Возвращение и задание свойства на языке Visual C#

В этом примере кода показано, как получить Edition свойство Information объекта и как задать SqlExecutionModes свойство свойства ConnectionContext свойства элементу SqlExecutionModes ExecuteSql перечисленного типа.

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

Задание различных свойств перед созданием объекта на языке Visual Basic

В этом примере кода показана непосредственная установка свойства AnsiNullsStatus объекта Table, а также создание и добавление столбцов перед созданием объекта 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()

Задание различных свойств перед созданием объекта на языке Visual C#

В этом примере кода показана непосредственная установка свойства AnsiNullsStatus объекта Table, а также создание и добавление столбцов перед созданием объекта 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();   
}  

Проход по всем свойствам объекта на языке Visual Basic

Этот пример кода выполняет итерацию по коллекции StoredProcedure свойств объекта и отображает их на экране вывода Visual Studio.

В примере объект был помещен в квадратные скобки, Property так как он также является ключевым словом 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

Проход по всем свойствам объекта на языке Visual C#

Этот пример кода выполняет итерацию по коллекции StoredProcedure свойств объекта и отображает их на экране вывода Visual Studio.

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

Задание полей инициализации по умолчанию на языке Visual Basic

Этот пример кода демонстрирует, как свести к минимуму число свойств объекта, инициализируемых в программе SMO. Чтобы использовать объект StringCollection, необходимо включить инструкцию using System.Collections.Specialized.

Sql Server Profiler можно использовать для сравнения операторов чисел, отправленных экземпляру SQL Server с этой оптимизацией.

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

Задание полей инициализации по умолчанию на языке Visual C#

Этот пример кода демонстрирует, как свести к минимуму число свойств объекта, инициализируемых в программе SMO. Чтобы использовать объект StringCollection, необходимо включить инструкцию using System.Collections.Specialized.

Sql Server Profiler можно использовать для сравнения операторов чисел, отправленных экземпляру SQL Server с этой оптимизацией.

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