C#学习教程:使用ODP.NET按名称绑定查询参数我知道它绝对不是最好的Oracle供应商,它很快就会被弃用,我应该使用Oracle的ODP.NET。我仍在使用MS提供程序的原因是因为ODP.NET按位置而不是按名称绑定参数。当您在查询中使用许多参数时,这实际上可能是一个PITA,因为您必须小心以正确的顺序添加它们,这很容易导致错误。当在同一查询中多次使用同一参数时,这也很烦人,例如:SELECTA,B,CFROMFOOWHEREX=:PARAM_XOR:PARAM_X=0使用ODP.NET,我必须向OracleCommand添加两个参数,我认为这是愚蠢的......ODP.NET的OracleCommand有一个改变默认行为的属性:BindByName。当设置为true时,参数按名称绑定,这就是我想要的。不幸的是,这对我没有帮助,因为:我该如何处理?某处是否有BindByNameByDefault设置?(我没有找到类似的东西,但我可能错过了它......)我认为你可以创建你自己的提供者,使用你想要使用的默认值。您可以通过继承odp.net的所有类轻松创建此提供程序,只需调整一些属性,例如BindByName。DbProviderfactory将创建您的类而不是普通的odp.net类。使用间接和继承!如果通过抽象数据库类进行数据访问,则需要数据库实现句柄参数绑定。公共抽象类数据库{私有只读DbProviderFactory工厂;受保护的数据库(DbProviderFactory工厂){this.factory=factory;}publicvirtualDbCommandCreateCommand(StringcommandText){returnCreateCommand(CommandType.Text,commandText);commandType,StringcommandText){DbCommand命令=factory.CreateCommand();命令.CommandType=命令类型;命令.Text=命令文本;返回命令;}publicvirtualvoidBindParametersByName(DbCommandcommand){}}并选择创建覆盖默认命令创建的特定于Oracle的实现,或提供按名称绑定参数的选项。publicclassOracleDatabase:Database{publicOracleDatabase():base(OracleClientFactory.Instance){}publicoverrideDbCommandCreateCommand(CommandTypecommandType,StringcommandText){DbCommand命令=base.CreateCommand(commandType,commandText);BindParametersByName(command);命令返回命令;}publicoverridevoidBindParametersByName(DbCommandcommand){((OracleCommand)command).BindByName=true;用于根据企业库中的数据访问应用程序块的代码。至于停止使用Oracle的MicrosoftADO.NET提供程序:ODP.NET占用了我太多时间。以上就是C#学习教程:使用ODP.NET按名称绑定查询参数的全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
