C# 使用Oracle命令键入强制转换问题

C# 使用Oracle命令键入强制转换问题,c#,odp.net,C#,Odp.net,我们正在使用ODP.NET Oracle provider使用企业库5.0连接到Oracle DB 以下代码可以正常工作: Database database = DatabaseFactory.CreateDatabase(ORACLE_CONNECTION_CONFIG_NAME); using (OracleCommand dbCommand = (OracleCommand)database.GetStoredProcCommand(SP_NAME)) { dbCommand.P

我们正在使用ODP.NET Oracle provider使用企业库5.0连接到Oracle DB

以下代码可以正常工作:

Database database = DatabaseFactory.CreateDatabase(ORACLE_CONNECTION_CONFIG_NAME);
using (OracleCommand dbCommand = (OracleCommand)database.GetStoredProcCommand(SP_NAME))
{
    dbCommand.Parameters.Add("parameters");
    database.ExecuteReader(dbCommand);
} 
但是根据我们的要求,我们需要在创建数据库连接之前使用自定义逻辑解密连接字符串,因此我们不能使用DatabaseFactory.CreateDatabase方法

因此,我们使用以下代码:

Database database= new  Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleDatabase("encrypted connection string");
using (OracleCommand dbCommand = (OracleCommand)database.GetStoredProcCommand(SP_NAME))    {
    dbCommand.Parameters.Add("parameters");
    database.ExecuteReader(dbCommand);
}
但在运行时,上面的Oracle命令类型转换会引发以下错误:

无法强制转换类型为的对象 “System.Data.OracleClient.OracleCommand”以键入 “Oracle.DataAccess.Client.OracleCommand”


有人能告诉我为什么这会出错吗

这是解决这个问题的方法

  DbProviderFactory providerFactory = 
      DbProviderFactories.GetFactory("Oracle.DataAccess.Client");
  Database dbServer = 
      new Microsoft.Practices.EnterpriseLibrary.Data
                             .GenericDatabase("connection string", providerFactory);

这是解决这个问题的办法

  DbProviderFactory providerFactory = 
      DbProviderFactories.GetFactory("Oracle.DataAccess.Client");
  Database dbServer = 
      new Microsoft.Practices.EnterpriseLibrary.Data
                             .GenericDatabase("connection string", providerFactory);