В настоящее время я использую поставщик Microsoft ADO.NET для Oracle (System.Data.OracleClient). Я знаю, что это, безусловно, не лучший поставщик Oracle, и что он скоро будет устаревшим, вместо этого я должен использовать Oracle ODP.NET, Причина, по которой я все еще использую поставщика MS, заключается в том, что  ODP.NET привязывает параметры по позиции, а не по имени. Это действительно может быть PITA, когда вы используете много параметров в запросе, потому что вы должны быть осторожны, чтобы добавить их в правильном порядке, что может легко привести к ошибкам. Это также раздражает, когда вы используете один и тот же параметр несколько раз в одном запросе, например:
SELECT A,B,C FROM FOO WHERE X = :PARAM_X OR :PARAM_X = 0
С ODP.NET я должен добавить два параметра в OracleCommand, который, я думаю, глуп...
ODP.NET OracleCommand имеет свойство изменять это поведение по умолчанию: BindByName. Когда установлено значение true, параметры связаны по имени, и это то, что я хочу. К сожалению, это мне не очень помогает, потому что:
- По умолчанию установлено значение false
-  Я почти никогда не использую конкретные классы ADO.NET явно, я предпочитаю использовать уровень абстракции ADO.NET 2.0 (DbProviderFactory,DbConnection,DbCommand...), чтобы уменьшить связь с какой-либо конкретной СУБД. Таким образом, у меня нет доступа к свойствуBindByName, если я явно не укажу наOracleCommand, потеряв все преимущества или абстракцию.
-  При использовании ASP.NET SqlDataSource я сам не создаю сам DbCommand, поэтому я не могу установить значение BindByNameв true (я мог бы сделать это в событии Selecting, но это действительно боль, чтобы сделать это для каждого SqlDataSource...)
Как мне решить эту проблему? Есть ли параметр BindByNameByDefault где-то? (Я не нашел ничего подобного, но я, возможно, пропустил это...)
