Programar objetos SQL-DMO extendidos
Esta característica se quitará en la versión siguiente 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. La mayor parte de esos objetos se denominan con el formato ObjectName2 y extienden la funcionalidad de objetos con nombres similares admitidos por 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 usar 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 solo se va a usar 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 usar un nuevo objeto. Por tanto, la aplicación debe llamar al método IUnknown::QueryInterface para usar un objeto ObjectName2 con el objeto relacionado del que hereda y para controlar correctamente los errores.
En estos ejemplos se muestra cómo usar 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 solo se va a usar 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