【发布时间】:2014-11-19 18:57:51
【问题描述】:
我们正在使用 Enterprise Library 6.0 和以下代码来创建数据库实例并执行存储过程?任何帮助高度赞赏。提前致谢。
DatabaseProviderFactory factory = new DatabaseProviderFactory();
Database db = factory.CreateDefault();
DbCommand dbCommand = db.GetStoredProcCommand("ProcedureName");
OracleParameter outval = new OracleParameter("Test", OracleDbType.RefCursor);
outval.Direction = ParameterDirection.Output;
dbCommand.Parameters.Add(outval);
using (IDataReader reader = db.ExecuteReader(dbCommand))
{
while (reader.Read())
{
}
}
<add name="providerConnString" connectionString="Data Source=ABCD;Password=testuser;User ID=testpwd" providerName="Oracle.DataAccess.Client" />
我们间歇性地收到以下异常。当我们在空闲时间后尝试访问应用程序时会发生这种情况。企业库中的连接池是如何发生的?如果应用程序长时间处于空闲状态,它将如何工作?默认最小池大小和默认最大池大小是多少?
调用的目标已抛出异常。 System.Reflection.TargetInvocationException:已引发异常 通过调用的目标。 ---> System.TypeInitializationException:类型初始化程序 'Oracle.DataAccess.Client.OracleClientFactory' 抛出异常。 ---> System.TypeInitializationException:“Oracle.DataAccess.Client.CThreadPool”的类型初始化程序引发了异常。 ---> System.Runtime.InteropServices.COMException:检索 COM 类 具有 CLSID 的组件的工厂 {CB2F6723-AB3A-11D2-9C40-00C04FA30A3E} 由于以下原因而失败 错误:800703fa 尝试对具有 被标记为删除。 (来自 HRESULT 的异常:0x800703FA)。在 Oracle.DataAccess.Client.CThreadPool..cctor() --- 内部结束 异常堆栈跟踪 --- 在 Oracle.DataAccess.Client.OracleInit.Initialize() --- 内部结束 异常堆栈跟踪 --- --- 内部异常堆栈跟踪结束 --- 在 System.RuntimeFieldHandle.GetValue(RtFieldInfo field, Object instance, RuntimeType fieldType, RuntimeType declaringType, Boolean& 域初始化)在 System.Reflection.RtFieldInfo.UnsafeGetValue(Object obj) 在 System.Reflection.RtFieldInfo.InternalGetValue(对象 obj, StackCrawlMark 和 stackMark)在 System.Reflection.RtFieldInfo.GetValue(Object obj) 在 System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow) 在 Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSyntheticConfigSettings.GetDefaultMapping(字符串 dbProviderName) 在 Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSyntheticConfigSettings.GetDatabaseData(ConnectionStringSettings 连接字符串,数据库设置数据库设置)在 Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSyntheticConfigSettings.GetDatabase(字符串 名称)在 Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.b__2(字符串 n) 在 System.Collections.Concurrent.ConcurrentDictionary
2.GetOrAdd(TKey key, Func2 valueFactory) 在 Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.CreateDefault()
【问题讨论】:
-
企业库没有明确地做任何连接池。连接池将由底层提供者处理(在这种情况下,我相信 ODP.NET)。这个article 说使用组策略编辑器将“不要在用户注销时强制卸载用户注册表”选项更改为“启用”。
标签: c# asp.net .net enterprise-library