以前我写过SQL SERVER 2000通用数据访问层的模块,所以写基于Microsoft Oracle Data Provider(MS ODP)的数据访问层比较轻松(System.Data.OracleClient和System.Data.SqlServer差别甚微)。许多媒体对比过Microsoft Oracle Data Provider和Oracle公司自己提供的ODP for .NET,后者性能和稳定性的均高于前者(这点我自己没有测试过)。于是决定再做一个基于ODP for .NET的数据访问层。在从MS ODP向ODP for .NET的转变过程中,仅仅遇到一个问题,但正是这个问题导致工作的进展非常困难。该问题是由于ODP for .NET考虑到性能问题不提供OracleCommandBuilder.DeriveParameters()方法,导致无法获取Oracle数据库中存储过程的参数信息。我在Oracle官方论坛OTN看到一个帖子,解决方法是通过Oracle数据库中的all_argument view获取参数信息,但获取的信息不完整(缺少类型信息),从Oracle数据类型向.NET类型转换上也存在问题。而且我认为这也存在权限问题,因为要运行all_argument必须要有数据库的最高权限。其实这还谈不上解决方法,只是一个尝试,它还没有完全解决问题。我自己想了一个笨方法,仅用MS ODP里的OracleCommandBuilder.DeriveParameters()方法来获取Oracle数据库存储过程参数信息,其它由ODP for .NET处理。这肯定可以解决问题,但可能会导致系统性能下降,违反了改用ODP for .NET的初衷。OTN上有好几篇询问如何把ODP for .NET写入数据访问层的帖子,但是都不了了之,难点都是Oracle公司没提供OracleCommandBuilder.DeriveParameters()方法。谁有突破啊?