我有一点检索从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控件进行操作。
CommandTimeout属性似乎没有为System.Data.OracleClient对象所述的功能。我将这个参数添加到我的OracleCommand对象中,并根据我知道需要很长时间的查询进行测试,并且没有生成错误消息 - 应用程序只是等待响应。 – John 2010-07-16 16:04:22
尝试Devart dotConnect for Oracle(http://devart.com/dotconnect/oracle)。我们的用户无任何抱怨地使用CommandTimeout属性,并且我们有一个合适的向导帮助从OracleClient迁移。 – Devart 2010-07-19 08:36:04
“我处于限制使用MSDN Library连接到Oracle数据库的环境中。” - 看起来功能可能不被支持。 – John 2010-07-19 14:15:15