如何:修改示例以连接到 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>