Поделиться через


Настройка свойств

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

objInstance.PropertyName

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

Замечание

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

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

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

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

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

Вы можете справиться с этими обстоятельствами, перехватив UnknownPropertyException исключения SMO.PropertyCannotBeRetrievedException

Настройка полей инициализации по умолчанию

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

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

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

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

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

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

Примеры

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

Получение и настройка свойства в Visual Basic

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

Получение и настройка свойства в Visual C#

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

{   
//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 объекта.

Настройка различных свойств перед созданием объекта в 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 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();   
}  

Итерация всех свойств объекта в Visual Basic

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

В примере объект был помещен в квадратные скобки, Property так как он также является ключевым словом Visual Basic.

Итерация всех свойств объекта в Visual C#

Этот пример кода выполняет итерацию по Properties коллекции 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 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);   
  }   
}  

Настройка полей инициализации по умолчанию в Visual Basic

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

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

Настройка полей инициализации по умолчанию в Visual C#

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

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

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