ADO.NETでコーディングしているC#アプリケーションがあります。IDbCommand
、およびIDbConnection
インターフェイスを使用して、クロスデータベースコードを作成 してきました。
これまでのところ、すべてがうまく機能しています(Firebird、SQLite、SQL Server 2005、2008、Access 2007、Access 2010、およびOracle 11g全体)。
私が抱えている問題は、サポートする必要のあるOracle10gデータベースがあることです。
すべての「通常の」もの、接続の作成、およびコマンドは正常に機能しますが、インターフェイスを使用してパラメーターを作成しようとするIDataParameter
とcmd.CreateParamater()
、クエリのパラメーター構文が原因で10gで失敗します(パラメーター化されたクエリを使用しています)。
どうやら、Oracle 10gは、箱から出して、@
記号の使用をサポートしていません。Oracle 11g、SQL Server、および言及されている他のすべてのものはそうです。
たとえば、次のクエリは10gで失敗します。
select * from Products where ProductId = @ProductId
ただし、コロンを使用すると、上記のado.netインターフェイスを使用して問題なく成功するため、このクエリは成功します。
select * from Products where ProductId = :ProductId
残念ながら、コロンは他のほとんどのデータベース実装では機能しません。
@
または、パラメータの区切り文字の代わりに区切り文字を使用できるようにする、Oracle10gデータベースで反転できるオプションはありますか:
。
私が持っている現在の解決策は理想的とは言えません。顧客/クライアントがプロパティを初期化しParameterDelimiter
(デフォルトでは@
記号になっています)、を使用してstring.Format
を挿入しParameterDelimiter
ます。
顧客に区切り文字を渡さなくても、またはベースライブラリにデータベースの実装について知らせずに、これを行うための標準的な方法はありますか?(たとえば、ODP.NETを含め、に対してチェックしますOracleConnection
)