如何:修改示例以连接到 Oracle 及其他数据库
业务数据目录可以连接到以下数据库,并提供这些数据库中的业务数据:
Microsoft SQL Server
Oracle
OLE DB
ODBC
AdventureWorks2000 示例介绍了使用业务数据目录来显示 SQL Server 数据库中的业务数据的基本方式。当使用其他数据库(例如 Oracle、OLE DB 和 ODBC)时,您将执行完全相同的步骤;而且,我们建议您从 AdventureWorks 2000 示例元数据开始,并针对这些系统修改此元数据。但是,在针对这些系统修改 AdventureWorks 元数据或编写新的元数据时,应记住以下几点:
通配符在这些系统中可能会有所不同。SQL Server 使用星号 (*)。在 Oracle 和其他系统中,通配符通常是百分号 (%)。请确定您的系统使用的通配符,并在 <LobSystem> 标记的 WildcardCharacter 属性中更改它。
Oracle SQL 语法要求您通过为参数加上冒号 (:)(而非 at 符号 (@))前缀来指定查询中的参数。请务必在元数据的 SQL 语句中正确设置这些符号。
Oracle 需要连接字符串中的显式用户 ID 和密码参数,这意味着:
您必须在 SSO 中设置企业定义与 Oracle 凭据。
使用 RdbCredentials 的 AuthenticationMode。
确保在所有场服务器上启动 Microsoft SSO 服务并将其设置为自动启动。
您无法使用 "RdbConnection User ID" 和 "RdbConnection Password" 属性,因为这些值由 SSO 提供。如果您指定它们,则只会将它们忽略。您必须使用 SSO 提供 Oracle 凭据。
SSO 要求服务器之间采用 RPC 连接。请确保必需的端口(135 等等)处于打开状态。您可以使用 KB 167260 作为关于如何使用 Microsoft Windows 2003 Server 资源工具包中的 rpings.exe 和 rpingc.exe 实用工具验证 RPC 连接的指南。
示例
此示例演示如何为通过使用单一登录 (SSO) 连接的 Oracle 数据库设置 LobSystemInstance 属性。“EEDSTORE”必须与 TNS Net 服务名称相匹配。“OracleDb”必须与 SSO 中设置的企业应用程序定义的名称相匹配。
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<LobSystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://schemas.microsoft.com/office/2006/03/BusinessDataCatalog BDCMetadata.xsd" Type="Database" Version="2.1.1.5" Name="Oracle" xmlns="https://schemas.microsoft.com/office/2006/03/BusinessDataCatalog">
<Properties>
<Property Name="WildcardCharacter" Type="System.String">%</Property>
</Properties>
<LobSystemInstances>
<LobSystemInstance Name="Oracle Sys Instance">
<Properties>
<Property Name="AuthenticationMode" Type="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAuthenticationMode">RdbCredentials</Property>
<Property Name="DatabaseAccessProvider" Type="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAccessProvider">Oracle</Property>
<Property Name="RdbConnection Data Source" Type="System.String">FEEDSTORE</Property>
<Property Name="RdbConnection Pooling" Type="System.String">false</Property>
<Property Name="SsoApplicationId" Type="System.String">OracleDb</Property>
<Property Name="WildcardCharacter" Type="System.String">%</Property>
</Properties>
</LobSystemInstance>
</LobSystemInstances>
<Entities>
<Entity EstimatedInstanceCount="10000" Name="Employee">
<Properties>
<Property Name="Title" Type="System.String">EName</Property>
</Properties>
<Identifiers>
<Identifier TypeName="System.String" Name="EmployeeName" />
</Identifiers>
<Methods>
<Method Name="EmployeeFinder">
<Properties>
<Property Name="RdbCommandText" Type="System.String">SELECT * FROM EMP WHERE ENAME LIKE :Name ORDER BY EMPNO</Property>
<Property Name="RdbCommandType" Type="System.Data.CommandType, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">Text</Property>
</Properties>
<FilterDescriptors>
<FilterDescriptor Type="Wildcard" Name="EmployeeName" />
</FilterDescriptors>
<Parameters>
<Parameter Direction="In" Name=":Name">
<TypeDescriptor TypeName="System.String" IdentifierName="EmployeeName" AssociatedFilter="EmployeeName" Name="EmployeeName">
<DefaultValues>
<DefaultValue MethodInstanceName="IdEnumeratorInstance" Type="System.String">%</DefaultValue>
</DefaultValues>
</TypeDescriptor>
</Parameter>
<Parameter Direction="Return" Name="Employees">
<TypeDescriptor TypeName="System.Data.IDataReader, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" IsCollection="true" Name="Employees">
<TypeDescriptors>
<TypeDescriptor TypeName="System.Data.IDataRecord, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="Employee">
<TypeDescriptors>
<TypeDescriptor TypeName="System.Decimal" Name="EmpNO" />
<TypeDescriptor TypeName="System.String" IdentifierName="EmployeeName" Name="EName" />
<TypeDescriptor TypeName="System.String" Name="JOB" />
<TypeDescriptor TypeName="System.String" Name="MGR" />
<TypeDescriptor TypeName="System.String" Name="Job" />
<TypeDescriptor TypeName="System.DateTime" Name="HireDate" />
<TypeDescriptor TypeName="System.Decimal" Name="SAL" />
<TypeDescriptor TypeName="System.Decimal" Name="COMM" />
<TypeDescriptor TypeName="System.Decimal" Name="DEPTNo" />
</TypeDescriptors>
</TypeDescriptor>
</TypeDescriptors>
</TypeDescriptor>
</Parameter>
</Parameters>
<MethodInstances>
<MethodInstance Type="Finder" ReturnParameterName="Employees" ReturnTypeDescriptorName="Employees" ReturnTypeDescriptorLevel="0" Name="EmployeeFinderInstance" />
<MethodInstance Type="SpecificFinder" ReturnParameterName="Employees" ReturnTypeDescriptorName="Employees" ReturnTypeDescriptorLevel="0" Name="EmployeeSpecificFinderInstance" />
<MethodInstance Type="IdEnumerator" ReturnParameterName="Employees" ReturnTypeDescriptorName="Employees" ReturnTypeDescriptorLevel="0" Name="IdEnumeratorInstance" />
</MethodInstances>
</Method>
</Methods>
</Entity>
</Entities>
</LobSystem>