Skip to main content

 

 

 

 
Language:
 
 
 
OutSystems

Oracle Data Provider for .NET(ODP.NET)ドライバの問題

症状

OutSystems開発者がConfiguration ToolやService Studioを使用しているとき、問題が発生する場合があります。Platform Serverを実行しているPCのGACのODP.NETドライバのバージョンがOutSystemsプラットフォームで使用されているバージョン(4.121.2.20150926)と異なる場合、エラーが発生する可能性があります。

エラーメッセージの例1アプリケーション実行時のエラー

Unsupported column datatype.

   at OracleInternal.TTC.TTCExecuteSql.ReceiveExecuteResponse(Accessor[]& defineAccessors, Accessor[] bindAccessors, Boolean bHasReturningParams, SQLMetaData& sqlMetaData, SqlStatementType statementType, Int64 noOfRowsFetchedLastTime, Int32 noOfRowsToFetch, Int32& noOfRowsFetched, Int64& queryId, Int32 longFetchSize, Int64 initialLOBFetchSize, Int64[] scnFromExecution, Boolean& bAllPureInputBinds, DataUnmarshaller& dataUnmarshaller, MarshalBindParameterValueHelper& marshalBindParamsHelper, Int64[]& rowsAffectedByArrayBind, Boolean bDefineDone, Boolean& bMoreThanOneRowAffectedByDmlWithRetClause, Boolean bLOBArrayFetchRequired)

   at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteReader(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, OracleDataReaderImpl& rdrImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[] scnForExecution, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, Int64& internalInitialLOBFS, OracleException& exceptionForArrayBindDML, Boolean isDescribeOnly, Boolean isFromEF)

   at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)

   at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior)

   at OutSystems.HubEdition.DatabaseProvider.Oracle.ExecutionService.ExecutionService.ExecuteReader(IDbCommand cmd)

   at OutSystems.Internal.Db.ManagedCommand.ExecuteReader(String description, Boolean isApplication, Boolean transformParameters, Boolean skipLog)

   at OutSystems.Internal.Db.DatabaseAccessProvider`1.ExecuteQuery[T](Command cmd, GenericRecordList`1 rl, String description, Boolean transformParameters, Boolean skipLog)

   at OutSystems.Internal.Db.DatabaseAccessProvider`1.ExecuteQuery[T](Command cmd, GenericRecordList`1 rl, String description)

   at ssXmlTypeApp.Flows.FlowMainFlow.ScrnHomeScreen.FuncssPreparation.datasetGetXmltypes(HeContext heContext, Int32 maxRecords, IterationMultiplicity multiplicity, Int64& outParamCount)

   at ssXmlTypeApp.Flows.FlowMainFlow.ScrnHomeScreen.Preparation(HeContext heContext)

   at ssXmlTypeApp.Flows.FlowMainFlow.ScrnHomeScreen.Page_Load(Object sender, EventArgs e)

   at System.Web.UI.Control.OnLoad(EventArgs e)

   at System.Web.UI.Control.LoadRecursive()

   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

 ```

### エラーメッセージの例2Configuration Tool使用中のエラー

Error: Attempt by method 'OutSystems.HubEdition.DatabaseProvider.Oracle.ExecutionService.ExecutionService.TransformDatabaseToRuntimeValue(System.Object)' to access type 'Oracle.ManagedDataAccess.Types.OracleXmlType' failed.

at OutSystems.HubEdition.DatabaseProvider.Oracle.ExecutionService.ExecutionService.TransformDatabaseToRuntimeValue(Object value)in c:\Go\GoAgent2\pipelines\NRDevelopment\b10_0_0\HubServer\DatabaseProviders\OracleDatabaseProvider\ExecutionService\ExecutionService.cs:line 354


![](images/oracle-odp-net-issues_0.png)

### エラーメッセージの例3Service Studioの高度なクエリ

「Database returned the following error:

Error in advanced query SQL1: Unsupported column datatype.」

![](images/oracle-odp-net-issues_1.png)

図1 - 高度なクエリのエラー

## 原因

OutSystems 10では、(ほかにも軽微な変更がありますが、特に)XMLタイプのサポートが追加された新しいバージョンのODP.NETドライバを使用しています。このアップグレードは軽微な改定であるため、本来は問題は発生しません。

しかし残念ながら、バージョンメタデータが2つのアセンブリ(v4.121.2.0)間で変更されず、CLRアセンブリの解決プロセスでこれらを区別することができません。アセンブリの公開APIは変更されているため、問題が発生する可能性があります。

図2と3は、これら2つのドライバのアセンブリのメタデータを示しています。

![](images/oracle-odp-net-issues_2.png)

図2 - 以前のODP.NETドライバのメタデータ

![](images/oracle-odp-net-issues_3.png)

図3 - 新しいODP.NETドライバのメタデータ 

## 解決策

この問題が発生した場合、以下の手順を実行します。

1.GAC内のOracle.ManagedDataAccess.dllを使用するアプリケーションがあるかどうかを確認します(この作業は簡単ではありません。[fuslogvw](http://msdn.microsoft.com/en-us/library/e74a18c4%28VS.71%29.aspx)または[プロセスエクスプローラ](https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)を使用してみることができますが、これらによって表示されるのは過去/現在メモリ内に読み込まれたアセンブリのみです)。

2.GAC内のDLLを使用するアプリケーションがある場合、DLLをGACからそれらのアプリケーションのAPPBaseディレクトリにコピーします。

3.GACからDLLを削除します。これを行うには、以下に示すOracle OraProvCfg.exe(このアプリケーションはOracleのWebサイトでダウンロードすることができ、Oracle Data Access Componentsに含まれています)コマンドを使用します(管理者としてコマンドプロンプトを開きます)。

OraProvCfg.exe /action:ungac /providerpath:"Oracle.ManagedDataAccess"


![](images/oracle-odp-net-issues_4.png)

図4 - GACからのOracle.ManagedDataAccess.dllの削除

または、GAC内のDLLをOutSystemsプラットフォームで使用されるもの(これもインストールに含まれています)に更新することもできます。

OraProvCfg.exe /action:gac /providerpath:"Oracle.ManagedDataAccess.dll"

```

図5 - GACのOracle.ManagedDataAccess.dllの更新/追加

  • Was this article helpful?