拡張 SQL-DMO オブジェクトのプログラミング

この機能は、Microsoft SQL Server の次のバージョンで削除されます。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。

Microsoft SQL Server 2000 の SQL 分散管理オブジェクト (SQL-DMO) では、以前のリリースと互換性のない多数の新しいオブジェクトが特徴でした。これらのオブジェクトのほとんどは、ObjectName2 の形式で名前が付けられ、SQL Server version 7.0 でサポートされている同様の名前のオブジェクトの機能を拡張しています。たとえば、UserDefinedDataType2 オブジェクトは、Collation プロパティを公開することで UserDefinedDataType オブジェクトの機能を拡張します。UserDefinedDataType2 などのオブジェクトは、そのベース オブジェクトのメソッドおよびプロパティを継承します。したがって、アプリケーションでは、常に UserDefinedDataType2 オブジェクトを使用して、UserDefinedDataType オブジェクトのメソッドやプロパティを呼び出すことができます。

既存の SQL Server 7.0 アプリケーションを変更する必要はありません。このアプリケーションから、SQL Server 2000 以降で公開された新しいオブジェクト、メソッド、およびプロパティは参照されません。

C++ と拡張 SQL-DMO オブジェクトの併用

新しい SQL-DMO オブジェクトを使用する C++ アプリケーションは、SQL Server 2000 以降のインスタンスのみで使用される場合、プログラムによる追加の処理は必要ありません。ただし、SQL Server 7.0 でも使用されている、新しい SQL-DMO オブジェクトを使用する C++ アプリケーションでは、新しいオブジェクトを使用するとエラーが発生します。そのため、ObjectName2 オブジェクトを継承元の関連するオブジェクトと併用したり、エラーを適切に処理したりするには、アプリケーションは IUnknown::QueryInterface メソッドを呼び出す必要があります。

UserDefinedDataType2 オブジェクトの Collation プロパティを使用して ObjectName2 オブジェクトを使用する方法を次の例に示します。最初の例では、SQL Server 2000 以降で実行されるアプリケーションでの使用方法を示しています。次の例では、SQL Server 7.0 でも実行される可能性のあるアプリケーションでの使用方法を示しています。

SQL Server 2000 以降での拡張 SQL-DMO オブジェクトの参照

//Define variable.
LPSQLDMOUSERDEFINEDDATATYPE2 oUDDT2 = NULL;

// Do CoCreate Instance for UserDefinedDataType.
CoCreateInstance(CLSID_SQLDMOUserDefinedDataType, NULL, CLSCTX_INPROC_SERVER, IID_ISQLDMOUserDefinedDataType2, (LPVOID*) &oUDDT2))

oUDDT2->SetCollation(L"German_Phonebook_CI_AI_KI_WI");

// Now add the UserDefinedDataType object to the UserDefinedDataTypes // collection.

SQL Server 7.0 での拡張 SQL-DMO オブジェクトの参照

// Define variables.
LPSQLDMOUSERDEFINEDDATATYPE oUDDT = NULL;
LPSQLDMOUSERDEFINEDDATATYPE2 oUDDT2 = NULL;
HRESULT hr;

// Do CoCreate Instance for UserDefinedDataType.
CoCreateInstance(CLSID_SQLDMOUserDefinedDataType2, NULL, CLSCTX_INPROC_SERVER, IID_ISQLDMOUserDefinedDataType, (LPVOID*) &oUDDT))

// QueryInterface UserDefinedDataType2.
// Gracefully handle error situations arising from use with version // 7.0.
hr=oUDDT->QueryInterface(IID_ISQLDMOUserDefinedDatatype2,&oUDDT2);
if (SUCCEEDED(hr))
oUDDT2->SetCollation(L"German_Phonebook_CI_AI_KI_WI");
else
// oUDDT2 is not supported. Perform error handling routine.

// Now add the UserDefinedDataType object to the UserDefinedDataTypes // collection.

Visual Basic と拡張 SQL-DMO オブジェクトの併用

新しい SQL-DMO オブジェクトを使用する Visual Basic アプリケーションは、Microsoft SQL Server 2000 以降のみで使用される場合、プログラムによる追加の処理は必要ありません。遅延バインドを使用する Visual Basic アプリケーションにも追加の処理は不要です。ただし、事前バインドを使用する Visual Basic アプリケーションでは、ObjectName2 オブジェクト変数が正確に設定されている必要があります。たとえば、このサンプル コードでは、StoredProcedures.Item メソッドは、StoredProcedure2 オブジェクトではなく StoredProcedure オブジェクトを返します。

Dim oSQLSvr2 as New SQLServer2
oSQLSvr2.Connect "Myserver","sa",""
MsgBox oSQLSrv2.Databases("northwind").StoredProcedures(1).Name

ただし、この方法では、StoredProcedures.Item メソッドは StoredProcedure2 オブジェクトに対して IUnknown::QueryInterface メソッドを呼び出します。

Dim oStoredProc2 as SQLDMO.StoredProcedure2
Set oStoredProc2 = oSQLSrv2.Databases("northwind").StoredProcedures(1)
oStoredProc2.IsDeleted