Установка свойств
Свойства — это значения, которые хранят описательные сведения об объекте. Например, параметры конфигурации Microsoft SQL Server представлены свойствами объекта Configuration. К свойствам можно получать как прямой, так и косвенный доступ при помощи коллекции свойств. Для прямого доступа к свойствам используется следующий синтаксис:
objInstance.PropertyName
Значение свойства можно изменить или получить в зависимости от того, доступно ли свойство для чтения и записи или только для чтения. Кроме того, некоторые свойства необходимо задавать перед тем, как можно будет создать объект. Дополнительные сведения о конкретном объекте см. в справочнике по объектам SMO.
Примечание |
---|
Коллекции дочерних объектов отображаются в виде свойства объекта. Например, коллекция Tables является свойством объекта Server. Дополнительные сведения см. в разделе Использование коллекций. |
Свойства объекта являются элементами коллекции Properties. С помощью коллекции Properties можно просматривать все свойства объекта.
Иногда свойство недоступно по следующим причинам.
Версия сервера не поддерживает это свойства (как при попытке получить доступ к свойству, которое представляет новую функцию SQL Server из более старой версии SQL Server).
Сервер не предоставляет данные для свойства (как при попытке доступа к свойству, представляющему компонент SQL Server, который не установлен).
Обрабатывать эти ситуации можно путем перехвата исключений SMO UnknownPropertyException и PropertyCannotBeRetrievedException.
Задание полей инициализации по умолчанию
При получении объектов SMO выполняет оптимизацию. Оптимизация заключается в сведении к минимуму загружаемых свойств за счет автоматического масштабирования между следующими состояниями.
Частично загружено. При первой ссылке на объект выдается минимум свойств (например, имя и схема).
Полностью загружено. При ссылке на любое свойство остальные свойства, которые можно быстро загрузить, инициализируются и делаются доступными.
Свойства, использующие много памяти. Остальные недоступные свойства используют значительный объем памяти, а свойство Expensive в них имеет значение TRUE (например, DataSpaceUsage). Эти свойства загружаются только тогда, когда на них производится ссылка.
Если приложение загружает дополнительные свойства помимо тех, которые представлены в состоянии частичной загрузки, оно отправляет запрос для получения этих дополнительных свойств и масштабируется до состояния полной загрузки. Это может привести к образованию ненужного трафика между клиентом и сервером. Дополнительную оптимизацию можно достичь за счет вызова метода SetDefaultInitFields. Метод SetDefaultInitFields позволяет создавать спецификацию свойств, которые загружаются при инициализации объекта.
Метод SetDefaultInitFields задает поведение при загрузке свойств для остальной части приложения или до его сброса. Первоначальное поведение можно сохранить с помощью метода GetDefaultInitFields и восстановить его при необходимости.
Примеры
Чтобы использовать какой-либо из представленных примеров кода, необходимо выбрать среду, шаблон и язык программирования, с помощью которых будет создаваться приложение. Дополнительные сведения см. в разделе «Как создать проект Visual Basic SMO в Visual Studio .NET» или «Как создать проект Visual C# SMO в Visual Studio .NET» в электронной документации по SQL Server.
Возвращение и задание свойства на языке Visual Basic
Этот пример кода демонстрирует возвращение свойства Edition объекта Information и установку свойства SqlExecutionModes в свойстве ConnectionContext в элемент ExecuteSql перечислимого типа SqlExecutionModes.
'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 в элемент ExecuteSql перечислимого типа 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.
'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Create a new table in the AdventureWorks2012 database.
Dim db As Database
db = srv.Databases("AdventureWorks2012")
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 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.
'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 AdventureWorks2012 database.
Dim db As Database
db = srv.Databases("AdventureWorks2012")
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#
Этот пример кода проходит по коллекции 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. Чтобы использовать объект 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 AdventureWorks2012 database.
Dim db As Database
db = srv.Databases("AdventureWorks2012")
'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 AdventureWorks2012.
'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 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);
}