Programmation d'objets SQL-DMO étendus

Cette fonctionnalité sera supprimée dans la prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

SQL-DMO (SQL Distributed Management Objects) dans Microsoft SQL Server 2000 comprenait plusieurs nouveaux objets qui n'étaient pas compatibles avec les versions antérieures. La plupart de ces objets sont nommés au format ObjectName2 et étendent les fonctionnalités d'objets nommés de façon similaire pris en charge par SQL Server version 7.0. Par exemple, l'objet UserDefinedDataType2 étend la fonctionnalité de l'objet UserDefinedDataType en exposant la propriété Collation. Des objets tels que UserDefinedDataType2 héritent les méthodes et les propriétés de leurs objets de base. Par conséquent, une application peut toujours utiliser l'objet UserDefinedDataType2 pour appeler les méthodes et les propriétés de l'objet UserDefinedDataType.

Il est inutile de modifier des applications SQL Server 7.0 existantes car elles ne font pas référence aux nouveaux objets, méthodes et propriétés qui sont exposés dans SQL Server 2000 et versions ultérieures.

Utilisation de C++ avec les objets SQL-DMO étendus

Les applications C++ qui utilisent les nouveaux objets SQL-DMO ne nécessitent pas d'étapes de programmation supplémentaires si elles sont uniquement utilisées avec des instances de SQL Server 2000 et versions ultérieures. Toutefois, les applications C++ qui utilisent les nouveaux objets SQL-DMO et qui sont également utilisées avec SQL Server 7.0 génèreront une erreur si elles tentent d'utiliser un nouvel objet. Par conséquent, l'application doit appeler la méthode IUnknown::QueryInterface pour utiliser un objet ObjectName2 avec l'objet connexe dont il hérite et gérer les erreurs naturellement.

Ces exemples montrent comment utiliser des objets ObjectName2 à l'aide de la propriété Collation de l'objet UserDefinedDataType2. Le premier exemple concerne une application qui s'exécute avec SQL Server 2000 et versions ultérieures. Le deuxième exemple concerne une application qui peut également s'exécuter avec SQL Server 7.0.

Exemples

Référencement des objets SQL-DMO étendus avec SQL Server 2000 et versions ultérieures

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

Référencement des objets SQL-DMO étendus avec 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.

Utilisation de Visual Basic avec les objets SQL-DMO étendus

Les applications Visual Basic qui utilisent les nouveaux objets SQL-DMO ne nécessitent pas d'étapes de programmation supplémentaires si elles sont uniquement utilisées avec des instances de Microsoft SQL Server 2000 et versions ultérieures. Aucune étape supplémentaire n'est requise pour les applications Visual Basic qui utilisent la liaison tardive. Toutefois, les applications Visual Basic qui utilisent la liaison anticipée doivent définir une variable objet ObjectName2 avec précision. Par exemple, dans cet exemple de code, la méthode StoredProcedures.Item retourne un objet StoredProcedure, et non un objet StoredProcedure2 :

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

Toutefois, avec cette approche, la méthode StoredProcedures.Item appelle la méthode IUnknown::QueryInterface pour l'objet StoredProcedure2 :

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