プロパティは、オブジェクトに関する説明情報を格納する値です。 たとえば、Microsoft SQL Server の構成オプションは、 Configuration オブジェクトのプロパティによって表されます。 プロパティ コレクションを使用して、直接または間接的にプロパティにアクセスできます。 プロパティに直接アクセスする場合は、次の構文を使用します。
objInstance.PropertyName
プロパティの値は、プロパティが読み取り/書き込みアクセス権を持っているか、読み取り専用アクセス権を持っているかに応じて変更または取得できます。 また、オブジェクトを作成する前に、特定のプロパティを設定する必要もあります。 詳細については、特定のオブジェクトの SMO リファレンスを参照してください。
注
子オブジェクトのコレクションは、オブジェクトのプロパティとして表示されます。 たとえば、 Tables コレクションは、 Server オブジェクトのプロパティです。 詳細については、「コレクションの 使用」を参照してください。
オブジェクトのプロパティは、Properties コレクションのメンバーです。 Properties コレクションを使用すると、オブジェクトのすべてのプロパティを反復処理できます。
次の理由により、プロパティを使用できない場合があります。
サーバー バージョンでは、以前のバージョンの SQL Server の新しい SQL Server 機能を表すプロパティにアクセスしようとした場合など、プロパティはサポートされていません。
インストールされていない SQL Server コンポーネントを表すプロパティにアクセスしようとした場合など、サーバーはプロパティのデータを提供しません。
これらの状況は、 UnknownPropertyException と PropertyCannotBeRetrievedException SMO 例外をキャッチすることで処理できます。
既定の初期化フィールドの設定
SMO は、オブジェクトを取得するときに最適化を実行します。 最適化では、次の状態間で自動的にスケーリングすることで、読み込まれるプロパティの数が最小限に抑えられます。
部分的に読み込まれます。 オブジェクトが最初に参照されると、使用可能な最小限のプロパティ (名前やスキーマなど) があります。
完全に読み込まれます。 プロパティが参照されると、読み込み速度が速い残りのプロパティが初期化され、使用可能になります。
大量のメモリを使用するプロパティ。 残りの使用できないプロパティでは、大量のメモリが使用され、 Expensive プロパティ値が true ( DataSpaceUsage など) になります。 これらのプロパティは、特に参照されている場合にのみ読み込まれます。
アプリケーションが、部分的に読み込まれた状態で提供されるプロパティ以外の追加のプロパティをフェッチする場合は、クエリを送信してこれらの追加のプロパティを取得し、完全に読み込まれた状態にスケールアップします。 これにより、クライアントとサーバーの間で不要なトラフィックが発生する可能性があります。 SetDefaultInitFields メソッドを呼び出すことで、より多くの最適化を実現できます。 SetDefaultInitFields メソッドを使用すると、オブジェクトの初期化時に読み込まれるプロパティを指定できます。
SetDefaultInitFields メソッドは、アプリケーションの残りの部分またはリセットされるまでのプロパティの読み込み動作を設定します。 GetDefaultInitFieldsメソッドを使用して元の動作を保存し、必要に応じて復元できます。
例示
提供されているコード例を使用するには、プログラミング環境、プログラミング テンプレート、およびアプリケーションを作成するプログラミング言語を選択する必要があります。 詳細については、SQL Server オンライン ブックの「方法: Visual Studio .NET で Visual Basic SMO プロジェクトを作成する」または「方法: Visual Studio .NET で Visual C# SMO プロジェクトを作成する」を参照してください。
Visual Basic でのプロパティの取得と設定
このコード例では、Information オブジェクトのEdition プロパティを取得する方法と、ConnectionContext プロパティのSqlExecutionModes プロパティをSqlExecutionModes列挙型のExecuteSql メンバーに設定する方法を示します。
Visual C でのプロパティの取得と設定#
このコード例では、Information オブジェクトのEdition プロパティを取得する方法と、ConnectionContext プロパティのSqlExecutionModes プロパティを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 でオブジェクトを作成する前にさまざまなプロパティを設定する
このコード例では、Table オブジェクトのAnsiNullsStatus プロパティを直接設定する方法と、Table オブジェクトを作成する前に列を作成および追加する方法を示します。
Visual C でオブジェクトを作成する前にさまざまなプロパティを設定する#
このコード例では、Table オブジェクトのAnsiNullsStatus プロパティを直接設定する方法と、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 でのオブジェクトのすべてのプロパティの反復処理
このコード例では、StoredProcedure オブジェクトのProperties コレクションを反復処理し、Visual Studio の出力画面に表示します。
この例では、 Property オブジェクトも Visual Basic キーワードであるため、角かっこで囲まれています。
Visual C でオブジェクトのすべてのプロパティを反復処理する#
このコード例では、StoredProcedure オブジェクトのProperties コレクションを反復処理し、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 のインスタンスに送信されるステートメントの数を、この最適化と比較できます。
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);
}