Compartilhar via


Programando objetos SQL-DMO estendidos

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

Os objetos SQL-DMO (SQL Distributed Management Objects) no Microsoft SQL Server 2000 apresentam vários objetos novos que não eram compatíveis com as versões anteriores. A maioria desses objetos segue o padrão de nomeação ObjectName2 e estende a funcionalidade de objetos nomeados de forma semelhante suportados pelo SQL Server versão 7.0. Por exemplo, o objeto UserDefinedDataType2 estende a funcionalidade do objeto UserDefinedDataType expondo a propriedade Collation. Objetos como UserDefinedDataType2 herdam os métodos e as propriedades de seus objetos base. Portanto, um aplicativo sempre pode usar o objeto UserDefinedDataType2 para chamar os métodos e as propriedades do objeto UserDefinedDataType.

Não é necessário modificar aplicativos SQL Server 7.0 existentes porque eles não fazem referência a novos objetos, métodos e propriedades presentes no SQL Server 2000 e versão posterior.

Usando C++ com objetos SQL-DMO estendidos

Os aplicativos C++ que usam os novos objetos SQL-DMO não precisarão executar etapas extras de programação se eles forem usados somente com instâncias do SQL Server 2000 e posterior. No entanto, os aplicativos C++ que usam os novos objetos SQL-DMO e também são usados com o SQL Server 7.0 receberão uma mensagem de erro se tentarem usar um novo objeto. Portanto, o aplicativo deve chamar o método IUnknown::QueryInterface para usar um objeto ObjectName2 com o objeto relacionado do qual ele é herdado, e para tratar erros corretamente.

Estes exemplos demonstram como usar objetos ObjectName2 usando a propriedade Collation do objeto UserDefinedDataType2. O primeiro exemplo demonstra o uso em um aplicativo executado com o SQL Server 2000 e versão posterior. O segundo exemplo demonstra o uso em um aplicativo que também poderia ser executado com o SQL Server 7.0.

Exemplos

Fazendo referência aos objetos SQL-DMO estendidos com o SQL Server 2000 e posterior

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

Fazendo referência aos objetos SQL-DMO estendidos com o 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.

Usando o Visual Basic com os objetos SQL-DMO estendidos

Os aplicativos do Visual Basic que usam os novos objetos SQL-DMO não precisarão executar etapas extras de programação se eles forem usados apenas com o Microsoft SQL Server 2000 ou posterior. Nenhuma etapa adicional é necessária para os aplicativos do Visual Basic que usam associação tardia. Porém, os aplicativos do Visual Basic que usam associação inicial devem ser precisos ao definirem uma variável de objeto ObjectName2. Por exemplo, nesta amostra de código, o método StoredProcedures.Item retorna um objeto StoredProcedure, não um objeto StoredProcedure2:

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

No entanto, usando esta abordagem, o método StoredProcedures.Item chama o método IUnknown::QueryInterface para o objeto StoredProcedure2:

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