다음을 통해 공유


확장 SQL-DMO 개체 프로그래밍

Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.

Microsoft SQL Server 2000의 SQL-DMO(SQL Distributed Management Objects)는 이전 버전과 호환되지 않는 많은 새로운 개체를 제공했습니다. 이러한 개체의 이름은 대부분 ObjectName2의 형태로 지정되며 SQL Server 버전 7.0에서 지원하는 유사한 이름의 개체 기능을 확장합니다. 예를 들어 UserDefinedDataType2 개체는 Collation 속성을 노출하여 UserDefinedDataType 개체의 기능을 확장합니다. UserDefinedDataType2와 같은 개체는 기본 개체의 메서드와 속성을 상속합니다. 따라서 응용 프로그램에서 항상 UserDefinedDataType2 개체를 사용하여 UserDefinedDataType 개체의 메서드와 속성을 호출할 수 있습니다.

기존 SQL Server 7.0 응용 프로그램은 SQL Server 2000 이상 버전에서 노출되는 새로운 개체, 메서드 및 속성을 참조하지 않으므로 수정할 필요가 없습니다.

확장 SQL-DMO 개체에 C++ 사용

새로운 SQL-DMO 개체를 사용하는 C++ 응용 프로그램은 SQL Server 2000 이상 버전의 인스턴스에서만 사용되므로 추가 프로그래밍 단계를 수행할 필요가 없습니다. 하지만 새로운 SQL-DMO 개체를 사용하고 SQL Server 7.0에서도 사용되는 C++ 응용 프로그램이 새 개체를 사용하려고 하면 오류가 발생합니다. 따라서 응용 프로그램에서 IUnknown::QueryInterface 메서드를 호출하여 ObjectName2 개체 및 이 개체를 상속해 준 관련 개체를 함께 사용하고 오류를 정상적으로 처리해야 합니다.

이 예에서는 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.

확장 SQL-DMO 개체에서 Visual Basic 사용

새로운 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