У меня есть немного кода .NET, который извлекает результаты из хранимой процедуры Oracle, используя библиотеку ADO.NET, и заполняет результаты в 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 для подключения к базе данных Oracle, поэтому я надеюсь, что смогу сделать это с помощью элемента управления ADO.NET.