Share via


Programar objetos SQL-DMO extendidos

Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

Los objetos de administración distribuidos de SQL (SQL-DMO) de Microsoft SQL Server 2000 incluían diferentes objetos nuevos que no eran compatibles con versiones anteriores. Los nombres de la mayoría de estos objetos tienen el formato nombreDeObjeto2y extienden la funcionalidad de objetos con nombres similares compatibles con SQL Server versión 7.0. Por ejemplo, el objeto UserDefinedDataType2 extiende la funcionalidad del objeto UserDefinedDataType mediante la exposición de la propiedad Collation. Los objetos como UserDefinedDataType2 heredan los métodos y las propiedades de sus objetos base. Por tanto, una aplicación siempre puede utilizar el objeto UserDefinedDataType2 para llamar a los métodos y propiedades del objeto UserDefinedDataType.

No es necesario modificar las aplicaciones de SQL Server 7.0 existentes, porque no hacen referencia a los nuevos objetos, métodos y propiedades que se exponen en SQL Server 2000 y posteriores.

Usar C++ con objetos SQL-DMO extendidos

Las aplicaciones C++ que utilizan los nuevos objetos SQL-DMO no necesitan realizar ningún paso de programación adicional si la aplicación sólo se va a utilizar con instancias de SQL Server 2000 y versiones posteriores. Sin embargo, las aplicaciones C++ que utilizan los nuevos objetos SQL-DMO y también se utilizan con SQL Server 7.0 encontrarán un error si intentan utilizar un nuevo objeto. Por tanto, la aplicación debe llamar al método IUnknown::QueryInterface para utilizar un objeto ObjectName2 con el objeto relacionado del que hereda y para controlar correctamente los errores.

En estos ejemplos se muestra cómo utilizar objetos ObjectName2 mediante la propiedad Collation del objeto UserDefinedDataType2. En el primer ejemplo se muestra el uso en una aplicación que se ejecuta con SQL Server 2000 y versiones posteriores. En el segundo ejemplo se muestra el uso en una aplicación que también se podría ejecutar con SQL Server 7.0.

Ejemplos

Hacer referencia a los objetos SQL-DMO extendidos con SQL Server 2000 y versiones posteriores

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

Hacer referencia a los objetos SQL-DMO extendidos 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.

Utilizar Visual Basic con objetos SQL-DMO extendidos

Las aplicaciones Visual Basic que utilizan los nuevos objetos SQL-DMO no necesitan realizar ningún paso de programación adicional si la aplicación sólo se va a utilizar con Microsoft SQL Server 2000 o versiones posteriores. No se requiere ningún paso adicional para las aplicaciones Visual Basic que utilizan el enlace en tiempo de ejecución. Sin embargo, las aplicaciones Visual Basic que utilizan el enlace en tiempo de compilación deben ser precisar en el establecimiento de una variable de objeto ObjectName2. Por ejemplo, en este ejemplo de código, el método StoredProcedures.Item devuelve un objeto StoredProcedure, no un objeto StoredProcedure2:

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

Sin embargo, mediante este enfoque, el método StoredProcedures.Item llama al método IUnknown::QueryInterface para el objeto StoredProcedure2:

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