Condividi tramite


Programmazione di oggetti SQL-DMO estesi

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

SQL Distributed Management Objects (SQL-DMO) in Microsoft SQL Server 2000 ha introdotto una serie di nuovi oggetti che non sono compatibili con le versioni precedenti. La maggior parte di tali oggetti presenta un nome dal formato ObjectName2 ed estende la funzionalità di oggetti denominati in modo analogo supportati da SQL Server versione 7.0. L'oggetto UserDefinedDataType2 estende ad esempio la funzionalità dell'oggetto UserDefinedDataType esponendo la proprietà Collation. Oggetti come UserDefinedDataType2 ereditano i metodi e le proprietà dei relativi oggetti di base. Un'applicazione può pertanto utilizzare sempre l'oggetto UserDefinedDataType2 per chiamare i metodi e le proprietà dell'oggetto UserDefinedDataType.

Non è necessario modificare le applicazioni SQL Server 7.0 esistenti, in quanto non fanno riferimento ai nuovi oggetti, metodi e proprietà esposti in SQL Server 2000 e versioni successive.

Utilizzo di C++ con oggetti SQL-DMO estesi

Per le applicazioni C++ che utilizzano i nuovi oggetti SQL-DMO non è necessario eseguire ulteriori operazioni a livello di codice se verranno utilizzate solo con istanze di SQL Server 2000 e versioni successive. Per le applicazioni C++ che invece utilizzano i nuovi oggetti SQL-DMO e vengono utilizzate con SQL Server 7.0 si verificherà un errore se si tenta di utilizzare un nuovo oggetto. L'applicazione deve pertanto chiamare il metodo IUnknown::QueryInterface per utilizzare un oggetto ObjectName2 con l'oggetto correlato dal quale eredita e per gestire gli errori correttamente.

Negli esempi seguenti viene illustrato come utilizzare gli oggetti ObjectName2 utilizzando la proprietà Collation dell'oggetto UserDefinedDataType2. Nel primo esempio viene illustrato l'utilizzo in un'applicazione in esecuzione con SQL Server 2000 e versioni successive. Nel secondo esempio viene illustrato l'utilizzo in un'applicazione che può essere eseguita anche con SQL Server 7.0.

Esempi

Riferimento agli oggetti SQL-DMO estesi con SQL Server 2000 e versioni successive

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

Riferimento agli oggetti SQL-DMO estesi con 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.

Utilizzo di Visual Basic con oggetti SQL-DMO estesi

Per le applicazioni Visual Basic che utilizzano i nuovi oggetti SQL-DMO non è necessario eseguire ulteriori operazioni a livello di codice se verranno utilizzate solo con istanze di Microsoft SQL Server 2000 e versioni successive. Non sono necessarie operazioni aggiuntive per le applicazioni Visual Basic che utilizzano l'associazione tardiva. Per le applicazioni Visual Basic che invece utilizzano l'associazione anticipata è necessario impostare in modo preciso una variabile oggetto ObjectName2. Nel esempio di codice seguente, ad esempio, il metodo StoredProcedures.Item restituisce un oggetto StoredProcedure e non un oggetto StoredProcedure2:

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

Utilizzando questo approccio invece il metodo StoredProcedures.Item chiama il metodo IUnknown::QueryInterface dell'oggetto StoredProcedure2:

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