我们使用ODP。. NET Oracle提供程序使用Enterprise library 5.0连接Oracle数据库。
下面的代码可以正常工作:
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);