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 によってサポートされていないため、次のどちらかの方法に従う必要があります。
最初から Business Connectivity Services モデルを作成します。詳細については、「BDC モデルの作成」を参照してください。Oracle データベース用にモデルを記述または変更するときの注意点については、以下のセクションを参照してください。
データベースで公開される外部データへのインターフェイスを提供する 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 とパスワード パラメーターが必要な場合:
Oracle の資格情報を使用して Secure Store Service でアプリケーション定義を設定します。
RdbCredentials の AuthenticationMode を使用します。
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="https://schemas.microsoft.com/windows/2007/BusinessDataCatalog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://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>