Procedimiento para adaptar los ejemplos a fin de conectarse a Oracle y otras bases de datos

El Catálogo de datos profesionales puede conectarse con las siguientes bases de datos y proporcionar datos profesionales almacenados en ellas:

  • Microsoft SQL Server

  • Oracle

  • OLE DB

  • ODBC

El ejemplo AdventureWorks2000 explica la forma básica de trabajar con el Catálogo de datos profesionales para mostrar los datos profesionales desde una base de datos de SQL Server. Cuando trabaja con otras bases de datos como Oracle, OLE DB y ODBC, sigue exactamente los mismos pasos, y se recomienda que empiece con los metadatos del ejemplo AdventureWorks 2000 y los adapte para estos sistemas. Sin embargo, al adaptar los metadatos de AdventureWorks o escribir nuevos metadatos para estos sistemas, debe recordar lo siguiente:

  • El carácter comodín puede diferir en estos sistemas. SQL Server usa el asterisco (*). En Oracle y otros sistemas, el carácter comodín es, generalmente, el signo de porcentaje (%). Determine el carácter comodín usado por su sistema y cámbielo en la propiedad WildcardCharacter de la etiqueta <LobSystem>.

  • La sintaxis SQL de Oracle requiere que el usuario especifique los parámetros en su consulta anteponiéndolos con un signo de dos puntos (:) en lugar del signo arroba (@). Asegúrese de establecer estos parámetros correctamente en las instrucciones SQL de sus metadatos.

  • Oracle requiere parámetros explícitos de Id. de usuario y contraseña en la cadena de conexión, lo que supone que:

    • Debe configurar una definición de empresa en SSO con las credenciales de Oracle.

    • Debe utilizar AuthenticationMode de RdbCredentials.

    • Asegúrese de que el servicio SSO de Microsoft se ha iniciado en todos los servidores de la granja y está establecido en inicio automático.

    • No puede utilizar las propiedades "RdbConnection User ID" y "RdbConnection Password", ya que estos valores los suministra SSO. Si los especifica, simplemente se omiten. Debe utilizar SSO para proporcionar las credenciales de Oracle.

    • El Inicio de sesión único (SSO) requiere conectividad RPC entre los servidores. Asegúrese de que los puertos necesarios (135, etc.) están abiertos. Puede utilizar KB 167260 como guía para comprobar la conectividad RPC mediante las utilidades rpings.exe y rpingc.exe que se encuentran en el Kit de recursos de Microsoft Windows 2003 Server.

Ejemplo

En este ejemplo se muestra cómo establecer las propiedades LobSystemInstance para una base de datos de Oracle que se conecta mediante Inicio de sesión único (SSO). FEEDSTORE debe coincidir con el nombre del servicio de red TNS. OracleDb debe coincidir con el nombre de la definición de aplicación de empresa que se configura en 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>