TableAdapter 構成ウィザードは、Oracle 固有の構文をサポートしていない

佐藤 靖典
SQL Developer Support Engineer

 

今回は、Visual Studio の TableAdapter 構成ウィザードで TableAadpter を生成できない事象について紹介します。

 

1. 事象

データソースとして Oracle を使用し、TableAdapter 構成ウィザードで特定のクエリを指定した場合、次のエラーなどにより TableAdapter の生成に失敗します。

  • クエリ テキストを解析できません。
  • Unable to parse query text.

 

現在までに、クエリで以下を使用した場合にエラーが発生することが報告されています。

  • SELECT ~ FOR UPDATE
  • (+) を使用した外部結合
  • ROW_NUMBER 関数
  • "||" による文字列の連結

 

2. エラーが発生する理由

Visual Studio がクエリ構文解析のために使用しているクエリ パーサーが、Oracle 固有の構文をサポートしていません。
また、大変恐れ入りますが、現時点で Oracle 固有の構文をサポートする予定はございません。

 

3. 対処案

残念ながら、上述のような構文を使用したクエリの場合、TableAdapter 構成ウィザードで TableAdapter を生成できませんので、以下のような対応をご検討ください。

1) TableAdapter 構成ウィザードでは、上述のようなエラーが発生する構文を省いたクエリを指定して、TableAdapter を生成する。
2) 生成された DataSetName.Designer.cs/vb の CommandText に、使用したい構文を追加する。

 

4. 補足

System.Data.OracleClient 名前空間は .NET Framework の将来のバージョンで削除される予定です。このため、オラクル社が提供している Oracle Data Provider for .NET (ODP.NET) をご利用いただく事を強くお奨め致します。
また、Visual Studio のアドインとして提供されているオラクル社の Oracle Developer Tools for Visual Studio (ODT) を使用することで、ODP.NET に対応した TableAdapter 構成ウィザードなどが利用できるようになります。

 

参考資料

Features and limitations of the .NET Managed Provider for Oracle

----------< 抜粋 (ここから) >----------

Supported Oracle servers

The .NET Managed Provider for Oracle is built on version 8.1.7 of the Oracle Call Interface (OCI) application programming interface (API). The .NET Managed Provider for Oracle is developed and fully tested against the Oracle 8.1.7 Server. The .NET Managed Provider for Oracle has also been tested against Oracle 8.1.6. Microsoft will only address and support issues that occur against Oracle 8.1.6 server or Oracle 8.1.7 server and Oracle 9i or later versions. The .NET Managed Provider for Oracle 2.0 was tested against Oracle 9i Release 2, Oracle 10g Release 1, and Oracle 10g Release 2.

----------< 抜粋 (ここまで) >----------

System.Data.OracleClient Namespace
----------< 抜粋 (ここから) >----------
This types in System.Data.OracleClient are deprecated and will be removed in a future version of the .NET Framework. For more information, see Oracle and ADO.NET.
----------< 抜粋 (ここまで) >----------