对扩展 SQL-DMO 对象进行编程

后续版本的 Microsoft SQL Server 将删除该功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

Microsoft SQL Server 2000 中的 SQL 分布式管理对象 (SQL-DMO) 有许多与早期版本不兼容的新功能。这些对象大多采用 ObjectName2 的命名形式,它们扩展了 SQL Server 7.0 支持的名称相似的对象的功能。例如,UserDefinedDataType2 对象通过公开 Collation 属性,扩展了 UserDefinedDataType 对象的功能。UserDefinedDataType2 之类的对象继承了其基对象的方法和属性。因此,应用程序始终可以使用 UserDefinedDataType2 对象调用 UserDefinedDataType 对象的方法和属性。

不必修改现有 SQL Server 7.0 应用程序,因为它们不会引用 SQL Server 2000 及更高版本中公开的新的对象、方法和属性。

和 C++ 应用程序一起使用扩展 SQL-DMO 对象

使用新的 SQL-DMO 对象的 C++ 应用程序如果仅与 SQL Server 2000 及更高版本的例程一起使用,则无需执行任何额外的编程步骤。但如果使用新的 SQL-DMO 对象的 C++ 应用程序与 SQL Server 7.0 一起使用,则在尝试使用新对象时将发生错误。因此,应用程序必须调用 IUnknown::QueryInterface 方法,使用 ObjectName2 对象通过其继承的相关对象正确地处理错误。

以下示例说明如何通过 UserDefinedDataType2 对象的 Collation 属性,使用 ObjectName2 对象。第一个示例说明随 SQL Server 2000 及更高版本运行的应用程序中的用法。第二个示例说明也可能随 SQL Server 7.0 运行的应用程序中的用法。

示例

随 SQL Server 2000 及更高版本一起引用扩展 SQL-DMO 对象

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

随 SQL Server 7.0 一起引用扩展 SQL-DMO 对象

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

和 Visual Basic 应用程序一起使用扩展 SQL-DMO 对象

使用新的 SQL-DMO 对象的 Visual Basic 应用程序如果与 Microsoft SQL Server 2000 或更高版本一起使用,则无需执行任何额外的编程步骤。对于使用后期绑定的 Visual Basic 应用程序,也无需额外的步骤。不过,对于使用早期绑定的 Visual Basic 应用程序,必须精确设置 ObjectName2 对象变量。例如,在本代码示例中,StoredProcedures.Item 方法返回一个 StoredProcedure 对象,而非 StoredProcedure2 对象:

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

不过,通过这种方法,StoredProcedures.Item 方法将为 StoredProcedure2 对象调用 IUnknown::QueryInterface 方法:

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