Freigeben über


Programmieren von erweiterten SQL-DMO-Objekten

Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird.

SQL Distributed Management Objects (SQL-DMO) in Microsoft SQL Server 2000 enthielt eine Reihe neuer Objekte, die mit früheren Versionen nicht kompatibel waren. Die meisten dieser Objekte werden im Format Objektname2 benannt und erweitern die von SQL Server Version 7.0 unterstützte Funktion ähnlich benannter Objekte. Das UserDefinedDataType2-Objekt erweitert beispielsweise die Funktion des UserDefinedDataType-Objekts durch Bereitstellen der Collation-Eigenschaft. Objekte wie UserDefinedDataType2 erben die Methoden und Eigenschaften ihrer Basisobjekte. Daher kann eine Anwendung mithilfe des UserDefinedDataType2-Objekts stets die Methoden und Eigenschaften des UserDefinedDataType-Objekts aufrufen.

Vorhandene SQL Server 7.0-Anwendungen müssen nicht modifiziert werden, da sie nicht auf die in SQL Server 2000 und höher bereitgestellten neuen Objekte, Methoden und Eigenschaften verweisen.

Verwenden von C++ mit den erweiterten SQL-DMO-Objekten

Für C++-Anwendungen, die die neuen SQL-DMO-Objekte verwenden, sind keine zusätzlichen programmgesteuerten Schritte erforderlich, wenn die Anwendung nur mit Instanzen von SQL Server 2000 und höher verwendet wird. Bei C++-Anwendungen, die die neuen SQL-DMO-Objekte verwenden und außerdem mit SQL Server 7.0 verwendet werden, tritt ein Fehler auf, wenn versucht wird, ein neues Objekt zu verwenden. Daher muss die Anwendung die IUnknown::QueryInterface-Methode aufrufen, um ein ObjectName2-Objekt mit dem zugehörigen Objekt, von dem es Daten erbt, zu verwenden und Fehler ordnungsgemäß zu behandeln.

In den folgenden Beispielen wird veranschaulicht, wie ObjectName2-Objekte mithilfe der Collation-Eigenschaft des UserDefinedDataType2-Objekts verwendet werden. Im ersten Beispiel wird die Verwendung in einer Anwendung veranschaulicht, die mit SQL Server 2000 und höher ausgeführt wird. Im zweiten Beispiel wird die Verwendung in einer Anwendung gezeigt, die auch mit SQL Server 7.0 ausgeführt werden kann.

Beispiele

Verweisen mit SQL Server 2000 und höher auf die erweiterten SQL-DMO-Objekte

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

Verweisen mit SQL Server 7.0 auf die erweiterten SQL-DMO-Objekte

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

Verwenden von Visual Basic mit den erweiterten SQL-DMO-Objekten

Für Visual Basic-Anwendungen, die die neuen SQL-DMO-Objekte verwenden, sind keine zusätzlichen programmgesteuerten Schritte erforderlich, wenn die Anwendung nur mit Microsoft SQL Server 2000 und höher verwendet wird. Keine zusätzlichen Schritte sind für Visual Basic-Anwendungen erforderlich, die spätes Binden verwenden. Visual Basic-Anwendungen, die frühes Binden verwenden, müssen eine ObjectName2-Objektvariable jedoch präzise festlegen. In diesem Codebeispiel gibt die StoredProcedures.Item-Methode beispielsweise ein StoredProcedure-Objekt und kein StoredProcedure2-Objekt zurück:

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

Bei diesem Ansatz ruft die StoredProcedures.Item-Methode die IUnknown::QueryInterface-Methode jedoch für das StoredProcedure2-Objekt auf:

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