我有一些.NET代码,它使用ADO.NET库从Oracle存储过程中检索结果,并将结果填充到DataTable中,如下所示:
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 Library连接到Oracle数据库,所以我希望我可以使用ADO.NET控件来实现。
答案 0 :(得分:1)
使用System.Data.OracleClient .NET 3.5提供程序时CommandTimeout属性不起作用。如果不使用外部库,似乎不支持此功能。
答案 1 :(得分:0)
您似乎需要CommandTimeout属性,而不是ConnectionTimeout。