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


Программирование расширенных объектов SQL-DMO

В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.

Среди распределенных управляющих объектов SQL (SQL-DMO) в Microsoft SQL Server 2000 есть несколько новых объектов, несовместимых с более ранними версиями. Большинство этих объектов получают имя в форме ObjectName2 и расширяют функциональность объектов с аналогичными именами, поддерживаемых SQL Server версии 7.0. Например, объект UserDefinedDataType2 расширяет функциональность объекта UserDefinedDataType, предоставляя свойство Collation. Такие объекты, как UserDefinedDataType2, наследуют методы и свойства соответствующих базовых объектов. Поэтому приложение может всегда использовать объект UserDefinedDataType2 для вызова методов и свойств объекта UserDefinedDataType.

Это необходимо, чтобы изменить существующие приложения SQL Server 7.0, так как они не ссылаются на новые объекты, методы и свойства, предоставленные в SQL Server 2000 и более поздних версиях.

Использование C++ с расширенными объектами SQL-DMO

В приложениях C++, которые используют новые объекты SQL-DMO, нет необходимости принимать дополнительные программные шаги, если приложение будет использоваться только с экземплярами SQL Server 2000 и более поздних версий. Но если приложения C++, в которых используются новые объекты SQL-DMO, применяются с SQL Server 7.0, то при попытке использовать новый объект возникнет ошибка. Поэтому приложение должно вызвать метод IUnknown::QueryInterface, чтобы использовать объект ObjectName2 со связанным объектом, от которого он наследует, и правильно обработать ошибки.

Эти примеры показывают, как применять объекты ObjectName2, использующие свойство Collation объекта UserDefinedDataType2. Первый пример демонстрирует использование в приложении, которое выполняется с SQL Server 2000 и более поздними версиями. Второй пример демонстрирует использование в приложении, которое может также выполняться с SQL Server 7.0.

Примеры

Ссылки на расширенные объекты SQL-DMO с SQL Server 2000 и более поздними версиями.

//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-DMO с SQL Server 7.0.

// 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

В приложениях Visual Basic, которые используют новые объекты SQL-DMO, нет необходимости принимать дополнительные программные шаги, если приложение будет использоваться только с экземплярами Microsoft SQL Server 2000 и более поздних версий. Не требуется дополнительных шагов для приложений Visual Basic, в которых используются поздние привязки. Однако, приложения Visual Basic, в которых используются ранние привязки, должны точно установить переменную объекта ObjectName2. Например, в этом примере кода метод StoredProcedures.Item возвращает объект StoredProcedure, но не объект StoredProcedure2.

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

Но при таком подходе метод StoredProcedures.Item вызывает метод IUnknown::QueryInterface для объекта StoredProcedure2.

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