C# &引用;ORA-01012“;尝试连接到Oracle数据库时出现错误消息

C# &引用;ORA-01012“;尝试连接到Oracle数据库时出现错误消息,c#,oracle10g,odp.net,C#,Oracle10g,Odp.net,我使用C#和Oracle Data Provider for.NET(ODP)对数据库进行了长时间的查询,然后使用TOAD在服务器端结束连接。之后,对数据库的后续调用,甚至创建新的OracleConnection对象,都会抛出以下错误: ORA-01012: not logged on Process ID: xxx Session ID: yyy Serial number: zzz 其中,进程ID和会话ID是我用来结束连接的标识符 似乎当我在服务器端结束与Oracle数据库的连接时,断开的

我使用C#和Oracle Data Provider for.NET(ODP)对数据库进行了长时间的查询,然后使用TOAD在服务器端结束连接。之后,对数据库的后续调用,甚至创建新的OracleConnection对象,都会抛出以下错误:

ORA-01012: not logged on
Process ID: xxx
Session ID: yyy Serial number: zzz
其中,进程ID和会话ID是我用来结束连接的标识符

似乎当我在服务器端结束与Oracle数据库的连接时,断开的连接会返回到连接池。当C#客户端代码(使用ODP)打开一个新连接时,可能会检索返回到连接池的断开连接

有没有关于如何纠正这种行为的想法


顺便说一句,我正在使用Oracle client 10,通过将连接字符串中的“Validate Connection”属性设置为true,解决了我的问题

你可以读更多

作为警告,我引用了Oracle文档

Validate Connection属性验证来自的连接 游泳池。仅当绝对必要时才应使用此属性 因为它会导致服务器往返数据库以验证每个 在将其提供给应用程序之前进行连接。如果无效 连接不常见,开发人员可以创建自己的事件 处理程序来检索新连接,而不是使用Validate 连接。这通常提供更好的性能


为什么要杀死蟾蜍身上的联系?为什么不在C#?@Limey中处理关闭所有这些都是由于应用程序在OLTP数据库而不是OLAP数据库中进行业务智能查询(这是我无法更改的,至少现在不能更改)。因此,有时,尽管过程很长,但用户在应用程序中不使用“取消选项”,希望系统返回他等待的数据,这就是为什么DBA终止会话,应用程序变得无响应。因此,您真正的问题似乎是您的查询运行时间太长。你考虑过改进吗?谢谢,工作很好。如果您不介意,请告诉我添加
Validate Connection=true时的具体区别在连接中
字符串web.config