Business Connectivity Services を使用して Oracle Database に接続する

最終更新日: 2010年5月26日

適用対象: SharePoint Server 2010

Microsoft Business Connectivity Services (BCS) では、次の種類のデータベースから外部データに接続できます。

  • Microsoft SQL Server

  • Oracle

  • OLE DB

  • ODBC

[方法] SQL Server テーブルに基づく外部コンテンツ タイプを作成する」では、Business Connectivity Services を使用して SQL Server データベースから外部データを表示するための基本的な方法を説明しています。Oracle、OLE DB、ODBC など、他のデータベースで作業する場合は、これらのデータベースは、Microsoft SharePoint Designer 2010 によってサポートされていないため、次のどちらかの方法に従う必要があります。

  1. 最初から Business Connectivity Services モデルを作成します。詳細については、「BDC モデルの作成」を参照してください。Oracle データベース用にモデルを記述または変更するときの注意点については、以下のセクションを参照してください。

  2. データベースで公開される外部データへのインターフェイスを提供する Web サービスまたは .NET Connectivity Assembly を作成します。詳細については、「Creating Web and WCF Services for Business Connectivity Services」と「[方法] .NET Connectivity Assembly を作成する」を参照してください。

Oracle データベースに接続するための BDC モデルの作成

最初からモデルを作成するには、「BDC モデルの作成」の手順に従います。

Oracle に接続するために BDC モデルを記述または変更するときは、次の点に注意する必要があります。

  • Oracle SQL 構文では、アットマーク (@) ではなくコロン (:) を前に置いて、クエリ内のパラメーターを指定する必要があります。メタデータ内の SQL ステートメントに、これらを正しく設定していることを確認してください。

  • Oracle に接続するために、接続文字列に明示的なユーザー ID とパスワード パラメーターが必要な場合:

    1. Oracle の資格情報を使用して Secure Store Service でアプリケーション定義を設定します。

    2. RdbCredentials の AuthenticationMode を使用します。

    3. RdbCredentials を認証モードとして使用する場合、RdbConnection User ID プロパティと RdbConnection Password プロパティは使用できません。これらの値は、Secure Store Service によって指定されます。これらのプロパティを指定しても無視されるだけです。Oracle の資格情報を指定するには Secure Store を使用する必要があります。

  • Oracle クライアントは、ファーム内のすべてのコンピューターにインストールし、TNS ネット サービスは、SharePoint から Oracle に接続するように構成する必要があります。これは、サーバー上の外部リスト、Web パーツ、およびプロファイル ページに関して必要です。検索などのアプリケーションはアプリケーション サーバーでのみ実行されるので、Oracle クライアントをアプリケーション サーバーにインストールすれば問題ありません。検索は、アプリケーション サーバーからしか接続しません。つまり、Oracle クライアントは Oracle に接続するファーム内のすべてのコンピューターにインストールする必要があります。また、同じ理由から、Oracle クライアントはリッチ クライアント コンピューターにインストールする必要があります。

次の例では、Secure Store Service を使用して接続している Oracle データベース用の LobSystemInstance プロパティを設定する方法について説明します。YOUR_ORACLE_NET_SERVICE_NAME_HERE は TNS ネット サービスの名前に、SECURESTORE_ORACLE_APP_ID_HERE は Secure Store Service で設定した企業アプリケーション定義の名前に置き換えます。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Model xmlns="http://schemas.microsoft.com/windows/2007/BusinessDataCatalog" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://schemas.microsoft.com/windows/2007/BusinessDataCatalog
 BDCMetadata.xsd" Name="OracleHRDB">
  <LobSystems>
  <LobSystem Type="Database" Name="OracleHR" DefaultDisplayName="Oracle 2">
    <Properties>
      <Property Name="WildcardCharacter" Type="System.String">%</Property>
    </Properties>
    <LobSystemInstances>
      <LobSystemInstance Name="Oracle HR Instance">
        <Properties>
        <Property Name="AuthenticationMode" Type="System.String">RdbCredentials
        </Property>
        <Property Name="DatabaseAccessProvider" Type="System.String">Oracle
        </Property>
        <Property Name="RdbConnection Data Source" Type="System.String">
          YOUR_ORACLE_NET_SERVICE_NAME_HERE</Property>
        <Property Name="SsoApplicationId" Type="System.String">
          SECURESTORE_ORACLE_APP_ID_HERE</Property>
        <!-- Server ship 
        <Property Name="SsoProviderImplementation" 
          Type="System.String">
            Microsoft.Office.SecureStoreService.Server.SecureStoreProvider,
            Microsoft.Office.SecureStoreService, Version=14.0.0.0, Culture=neutral,
            PublicKeyToken=71e9bce111e9429c</Property> --> 

         <!-- Client Ship -->
        <Property Name="SsoProviderImplementation" 
          Type="System.String">
          Microsoft.Office.BusinessData.Infrastructure.SecureStore.LocalSecureStoreProvider, 
          Microsoft.Office.BusinessData, Version=14.0.0.0, Culture=neutral, 
          PublicKeyToken=71e9bce111e9429c</Property> 
       </Properties>
      </LobSystemInstance>
    </LobSystemInstances>
    <Entities>
      <Entity EstimatedInstanceCount="10000" Name="Employee" 
        DefaultDisplayName="Employee" Namespace="HR.OracleModel" Version="1.0.0.0">
        <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 EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO 
                FROM SCOTT.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>
                    <DefaultValue MethodInstanceName="EmployeeFinderInstance" 
                      Type="System.String">%</DefaultValue>
                  </DefaultValues>
                </TypeDescriptor>
              </Parameter>
              <Parameter Direction="Return" Name="Employees">
                <TypeDescriptor TypeName="System.Data.IDataReader, System.Data, 
                  Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
                  IsCollection="true" Name="Employees">
                  <TypeDescriptors>
                    <TypeDescriptor TypeName="System.Data.IDataRecord, System.Data, 
                      Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
                      Name="Employee">
                      <TypeDescriptors>
                        <TypeDescriptor TypeName="System.Decimal" Name="EMPNO" />
                        <TypeDescriptor TypeName="System.String" ReadOnly ="true" 
                          IdentifierName="EmployeeName" Name="ENAME" />
                        <TypeDescriptor TypeName="System.String" Name="JOB" />
                        <TypeDescriptor TypeName="System.Decimal" Name="MGR" />                       
                        <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" >
                 <AccessControlList>
                    <AccessControlEntry Principal="redmond\domain users">
                      <Right BdcRight="Execute"/>
                      <Right BdcRight="Edit"/>
                      <Right BdcRight="SetPermissions"/>
                      <Right BdcRight="SelectableInClients"/>
                    </AccessControlEntry>
                  </AccessControlList>
                 </MethodInstance>
              <MethodInstance Type="SpecificFinder" ReturnParameterName="Employees" 
                ReturnTypeDescriptorName="Employee" ReturnTypeDescriptorLevel="1" 
                Name="EmployeeSpecificFinderInstance" >
                <AccessControlList>
                    <AccessControlEntry Principal="redmond\domain users">
                      <Right BdcRight="Execute"/>
                      <Right BdcRight="Edit"/>
                      <Right BdcRight="SetPermissions"/>
                      <Right BdcRight="SelectableInClients"/>
                    </AccessControlEntry>
                  </AccessControlList>
                 </MethodInstance>
              <MethodInstance Type="IdEnumerator" ReturnParameterName="Employees" 
                ReturnTypeDescriptorName="Employees" ReturnTypeDescriptorLevel="0" 
                Name="IdEnumeratorInstance" >
                 <AccessControlList>
                    <AccessControlEntry Principal="redmond\domain users">
                      <Right BdcRight="Execute"/>
                      <Right BdcRight="Edit"/>
                      <Right BdcRight="SetPermissions"/>
                      <Right BdcRight="SelectableInClients"/>
                    </AccessControlEntry>
                  </AccessControlList>
                 </MethodInstance>
            </MethodInstances>
          </Method>
          <Method Name="Update" DefaultDisplayName="EmployeeUpdater">
            <Properties>
              <Property Name="RdbCommandType" Type="System.Data.CommandType, System.Data, 
                Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                Text</Property>
              <Property Name="RdbCommandText" Type="System.String">
                UPDATE SCOTT.EMP 
                SET EMPNO=:EmpNo,JOB=:Job,MGR=:Mgr,HIREDATE=:HireDate,
                SAL=:Sal,COMM=:Comm,DEPTNO=:DeptNo 
                WHERE ENAME=:Name</Property>
            </Properties>
            <AccessControlList>
              <AccessControlEntry Principal="redmond\domain users">
                <Right BdcRight="Edit" />
                <Right BdcRight="Execute" />
                <Right BdcRight="SetPermissions" />
                <Right BdcRight="SelectableInClients" />
              </AccessControlEntry>              
            </AccessControlList>
            <Parameters>
              <Parameter Direction="In" Name=":EmpNo">
                <TypeDescriptor TypeName="System.Decimal" UpdaterField="true" 
                  Name="EMPNO" />
              </Parameter>
              <Parameter Direction="In" Name=":Name">
                <TypeDescriptor TypeName="System.String" IdentifierName="EmployeeName" 
                  Name="EmployeeName" >
                </TypeDescriptor>
              </Parameter>
              <Parameter Direction="In" Name=":Job">
                <TypeDescriptor TypeName="System.String" UpdaterField="true" 
                  Name="JOB" />
              </Parameter>
              <Parameter Direction="In" Name=":Mgr">
                <TypeDescriptor TypeName="System.Decimal" UpdaterField="true" 
                  Name="MGR" />
              </Parameter>
              <Parameter Direction="In" Name=":HireDate">
                <TypeDescriptor TypeName="System.Nullable`1[[System.DateTime, mscorlib, 
                  Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" 
                  UpdaterField="true" Name="HIREDATE" />
              </Parameter>
              <Parameter Direction="In" Name=":Sal">
                <TypeDescriptor TypeName="System.Nullable`1[[System.Decimal, mscorlib, 
                  Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" 
                  UpdaterField="true" Name="SAL" />
              </Parameter>
              <Parameter Direction="In" Name=":Comm">
                <TypeDescriptor TypeName="System.Nullable`1[[System.Decimal, mscorlib, 
                  Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" 
                  UpdaterField="true" Name="COMM">
                  <Properties>
                    <Property Name="Decimal Digits" Type="System.Int32">9</Property>
                  </Properties>
                </TypeDescriptor>
              </Parameter>
              <Parameter Direction="In" Name=":Deptno">
                <TypeDescriptor TypeName="System.Nullable`1[[System.Decimal, mscorlib, 
                  Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" 
                  UpdaterField="true" Name="DEPTNO">
                  <Properties>
                    <Property Name="Decimal Digits" Type="System.Int32">9</Property>
                  </Properties>
                </TypeDescriptor>
              </Parameter>
            </Parameters>
              <MethodInstances>
                <MethodInstance Type="Updater" Name="Update" 
                  DefaultDisplayName="SQLAllTypes Update">
                  <AccessControlList>
                    <AccessControlEntry Principal="redmond\domain users">
                      <Right BdcRight="Edit" />
                      <Right BdcRight="Execute" />
                      <Right BdcRight="SetPermissions" />
                      <Right BdcRight="SelectableInClients" />
                    </AccessControlEntry>
                   </AccessControlList>
                </MethodInstance>
              </MethodInstances>
            </Method>
          <Method Name="Delete" DefaultDisplayName="EmployeeDelete">
            <Properties>
              <Property Name="RdbCommandText" Type="System.String">
                DELETE FROM SCOTT.EMP WHERE ENAME = :Name</Property>
              <Property Name="RdbCommandType" Type="System.Data.CommandType, System.Data, 
                Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                Text</Property>
             </Properties>
            <AccessControlList>
              <AccessControlEntry Principal="redmond\domain users">
                <Right BdcRight="Edit" />
                <Right BdcRight="Execute" />
                <Right BdcRight="SetPermissions" />
                <Right BdcRight="SelectableInClients" />
              </AccessControlEntry>
              </AccessControlList>
            <Parameters>
               <Parameter Direction="In" Name=":Name">
                <TypeDescriptor TypeName="System.String" IdentifierName="EmployeeName" 
                  Name="EmployeeName" >
                </TypeDescriptor>
              </Parameter>
            </Parameters>
            <MethodInstances>
              <MethodInstance Type="Deleter" Name="Delete" DefaultDisplayName="Employee 
                Delete">
                <AccessControlList>
                  <AccessControlEntry Principal="redmond\domain users">
                    <Right BdcRight="Edit" />
                    <Right BdcRight="Execute" />
                    <Right BdcRight="SetPermissions" />
                    <Right BdcRight="SelectableInClients" />
                  </AccessControlEntry>
                 </AccessControlList>
              </MethodInstance>
            </MethodInstances>
          </Method>
        </Methods>
      </Entity>
    </Entities>
  </LobSystem>
  </LobSystems>
</Model>