現在、Oracle用のMicrosoft ADO.NETプロバイダ(System.Data.OracleClient
)を使用しています。私はそれが確かに利用可能な最高のOracleプロバイダではないとそれはwill soon be deprecated、私はOracleのODP.NETを代わりに使用する必要があります知っている。私がまだMSプロバイダーを使用している理由は、ODP.NETは、名前ではなく位置でパラメーターをバインドするためです。これは、正しい順序で追加することに注意する必要があるため、クエリで多くのパラメータを使用するとPITAになる可能性があり、バグにつながる可能性があります。ODP.NETで名前でクエリパラメータをバインドする
SELECT A,B,C FROM FOO WHERE X = :PARAM_X OR :PARAM_X = 0
、私は私が愚かだと思うOracleCommand
に2つのパラメータを追加する必要があり...
ODP.NETのOracleCommand
には、このデフォルト動作を変更するプロパティがあります。BindByName
。 trueに設定すると、パラメータは名前でバインドされます。これは必要なものです。残念ながら、これは本当に、私を助けていません:
- それは、私はほとんど明示的に具体的なADO.NETクラスを使用することはありません
- デフォルトでfalseに設定されている、私は
DbProviderFactory
(ADO.NET 2.0抽象化レイヤを使用することを好みます、DbConnection
、DbCommand
...)を使用して、特定のRDBMSへの結合を減らします。したがって、プロパティにアクセスすることはできません。明示的にOracleCommand
にキャストしない限り、すべてのメリットまたは抽象化が失われます。 - ASP.NET SqlDataSourceを使用しているときは、自分でDbCommandを作成しないため、
BindByName
をtrueに設定する機会はありません(選択イベントでも可能ですが、本当に苦痛です各SqlDataSourceでそれを行います...)
どうすれば問題を処理できますか?どこかでBindByNameByDefault
の設定がありますか? (私はそのようなものは見つけられませんでしたが、私はそれを見逃したかもしれません...)
この「機能」のために、私はただ3時間を無駄にしました! – Grzenio