Как я могу установить время жизни соединения для OracleDataAdapter, выполняющего хранимую процедуру, используя метод Fill? - PullRequest
1 голос
/ 12 июля 2010

У меня есть немного кода .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.

Ответы [ 2 ]

1 голос
/ 19 июля 2010

Свойство CommandTimeout не работает с использованием поставщика System.Data.OracleClient .NET 3.5.Похоже, что эта функция не поддерживается без использования внешней библиотеки.

0 голосов
/ 13 июля 2010

Кажется, вам нужно свойство CommandTimeout , а не ConnectionTimeout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...