2010-07-12 23 views
1

我有一点检索从Oracle存储过程的结果,使用ADO.NET库.NET代码,并将结果填入到像这样一个DataTable:如何使用填充方法为执行存储过程的OracleDataAdapter设置连接使用期限超时?

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数据库机器实际上响应速度慢得多,并且当有太多客户端开始访问硬件时,似乎变得没有响应。我想要做的是在oraAdapter.Fill命令上实现某种超时 - 因为看起来当数据库变得没有响应时,.NET应用程序将挂在'Fill'方法上长达10分钟或更长时间,永远不会到达'finally'代码块并关闭数据库连接。

我在一个环境中,因为我限制使用MSDN库连接到Oracle数据库,所以我希望我可以使用ADO.NET控件进行操作。

回答

1

CommandTimeout属性无法使用System.Data.OracleClient .NET 3.5 Provider。不使用外部库似乎不支持此功能。

0

看来你需要CommandTimeout属性,而不是ConnectionTimeout。

+0

CommandTimeout属性似乎没有为System.Data.OracleClient对象所述的功能。我将这个参数添加到我的OracleCommand对象中,并根据我知道需要很长时间的查询进行测试,并且没有生成错误消息 - 应用程序只是等待响应。 – John 2010-07-16 16:04:22

+0

尝试Devart dotConnect for Oracle(http://devart.com/dotconnect/oracle)。我们的用户无任何抱怨地使用CommandTimeout属性,并且我们有一个合适的向导帮助从OracleClient迁移。 – Devart 2010-07-19 08:36:04

+0

“我处于限制使用MSDN Library连接到Oracle数据库的环境中。” - 看起来功能可能不被支持。 – John 2010-07-19 14:15:15

相关问题