C# 如何为使用Fill方法执行存储过程的OracleDataAdapter设置连接寿命超时?

C# 如何为使用Fill方法执行存储过程的OracleDataAdapter设置连接寿命超时?,c#,.net,oracle,C#,.net,Oracle,我有一段.NET代码,它使用ADO.NET库从Oracle存储过程检索结果,并将结果填充到数据表中,如下所示: using System.Data.OracleClient; public DataTable getData() { OracleConnection conn = new OracleConnection("Data Source=DATASOURCE;Persist Security Info=True;User ID=userID;Password=userPass

我有一段.NET代码,它使用ADO.NET库从Oracle存储过程检索结果,并将结果填充到数据表中,如下所示:

using System.Data.OracleClient;

public DataTable getData()
{
    OracleConnection conn = new OracleConnection("Data Source=DATASOURCE;Persist Security Info=True;User ID=userID;Password=userPass;Unicode=True;Min Pool Size=1;Max Pool Size=20;Connection Lifetime=300");
    DataTable dt = new DataTable();
    conn.Open();
    try
    {
       OracleCommand oraCmd = new OracleCommand();
       oraCmd.Connection = conn;
       oraCmd.CommandText = "stored_procedure.function_name";
       oraCmd.CommandType = CommandType.StoredProcedure;
       oraCmd.Parameters.Add("cursor", OracleType.Cursor).Direction = ParameterDirection.Output;
       OracleDataAdapter oraAdapter = new OracleDataAdapter(oraCmd);
       oraAdapter.Fill(dt);
    }
    finally
    {
       conn.Close();
       return dt;
    }
}
这段代码在我实现代码的几个项目中一直没有出现任何问题。然而,我在一个新项目中遇到了一个问题,Oracle DB机器的响应速度实际上慢得多,而且当太多客户端开始访问硬件时,它似乎变得没有响应。我想做的是在oraAdapter.Fill命令上实现某种类型的超时,因为当数据库没有响应时,.NET应用程序将挂起'Fill'方法长达10分钟或更长时间,永远不会到达'finally'代码块并关闭DB连接


在我所处的环境中,我只能使用MSDN库连接到Oracle数据库,因此我希望可以使用ADO.NET控件

您似乎需要属性,而不是ConnectionTimeout。

您似乎需要属性,而不是ConnectionTimeout。

CommandTimeout属性在使用System.Data.OracleClient.NET 3.5提供程序时不起作用。如果不使用外部库,似乎不支持此功能。

使用System.Data.OracleClient.NET 3.5提供程序,CommandTimeout属性不起作用。如果不使用外部库,则似乎不支持此功能。

CommandTimeout属性的功能似乎与System.Data.OracleClient对象的功能不符。我将此参数添加到OracleCommand对象中,并针对我知道需要很长时间的查询对其进行测试,并且没有生成错误消息-应用程序只是等待响应。请尝试针对Oracle()的Devart dotConnect。我们的用户毫无怨言地使用CommandTimeout属性,我们有一个合适的向导帮助从OracleClient迁移。“我所处的环境限制我使用MSDN库连接到Oracle数据库。”-该功能可能不受支持。Oracle OCI中不提供此功能。但是,如果您正在使用Oracle的dotConnect的直接模式,CommandTimeout是可用的。CommandTimeout属性似乎与System.Data.OracleClient对象的说明不一样。我将此参数添加到OracleCommand对象中,并针对我知道需要很长时间的查询对其进行测试,并且没有生成错误消息-应用程序只是等待响应。请尝试针对Oracle()的Devart dotConnect。我们的用户毫无怨言地使用CommandTimeout属性,我们有一个合适的向导帮助从OracleClient迁移。“我所处的环境限制我使用MSDN库连接到Oracle数据库。”-该功能可能不受支持。Oracle OCI中不提供此功能。但是,如果您使用的是Oracle dotConnect的直接模式,则CommandTimeout可用。