我目前正在为 Oracle ( System.Data.OracleClient
) 使用 Microsoft ADO.NET 提供程序。我知道它肯定不是最好的 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.NETOracleCommand
具有更改该默认行为的属性:BindByName
. 当设置为true时,参数由名称绑定,这就是我想要的。不幸的是,这并没有真正帮助我,因为:
- 默认设置为 false
- 我几乎从不明确使用具体的 ADO.NET 类,我更喜欢使用 ADO.NET 2.0 抽象层(、、、
DbProviderFactory
...DbConnection
)DbCommand
来减少与任何特定 RDBMS 的耦合。因此,除非我明确地转换为 ,否则我无权访问该BindByName
属性,从而OracleCommand
失去所有好处或抽象。 - 使用 ASP.NET SqlDataSource 时,我自己不创建 DbCommand,因此我没有机会设置
BindByName
为 true(我可以在 Selecting 事件中执行此操作,但为每个执行此操作确实很痛苦SqlDataSource...)
我应该如何处理这个问题?BindByNameByDefault
某处有设置吗?(我没有找到类似的东西,但我可能错过了......)