Ошибка перехвата в GridView автоматической привязки данных - PullRequest
0 голосов
/ 19 июня 2009

У меня есть gridview с установленным DataSourceID, поэтому привязка данных происходит автоматически. Проблема в том, что иногда процедура, определенная в SqlDataSource, занимает очень много времени, поэтому привязка происходит с ошибкой истечения времени ожидания.

Как я могу перехватить эту ошибку, не привязывая вручную данные сетки и не окружая ее операторами try / catch?

Ответы [ 4 ]

4 голосов
/ 28 августа 2010

Если возникает исключение во время выполнения SqlDataSource, оно запускает соответствующее событие после действия - в данном случае выбрано. При желании вы можете создать обработчик события для этого события и в обработчике события сказать, что вы обработали исключение.

На этой диаграмме показано, как это взаимодействие работает с ObjectDataSource (концепция аналогична элементу управления SqlDataSource). При рассмотрении приведенной ниже диаграммы замените слова «ObjectDataSource» на «SqlDataSource» и «Базовый объект» на «Database», чтобы иметь отношение к SqlDataSource.

The datasource control raises events before and after its action.

Как видите, событие Selecting возникает до того, как данные отправляются в базу данных, а событие Selected возникает после того, как данные возвращаются (или, если есть исключение).

Вы можете создать обработчик события Selected на своей странице и проверить, произошло ли исключение, и решить, хотите ли вы обработать его самостоятельно. Фредрик Нормен имеет хорошую запись в блоге об этом: Обрабатывайте исключение элемента управления источником данных самостоятельно.

Дополнительные материалы для чтения: Доступ к данным в ASP.NET и их обновление: проверка событий элемента управления источником данных .

Счастливого программирования!

0 голосов
/ 19 июня 2009

как насчет привязки асинхронно? после завершения функция обратного вызова может вызвать databind, если ошибок не было возвращено.

РЕДАКТИРОВАТЬ: Я думаю, это руководство ... не то, что вы хотели.

0 голосов
/ 27 августа 2009

Единственное, что вы можете сделать, это обработать событие Page_Error

http://msdn.microsoft.com/en-us/library/ed577840.aspx

0 голосов
/ 19 июня 2009

Почему бы не решить проблему с тайм-аутом запроса? Либо оптимизируйте БД (предпочтительно), либо установите время ожидания соединения / команды выше текущего значения.

Вы можете настроить время ожидания следующим образом, подключившись к событию SqlDataSource Selecting :

protected void ds_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        e.Command.CommandTimeout = 5000;
    }

Если вы используете SQL Server, вы можете захотеть взглянуть на такие инструменты, как мастер настройки индекса / советник по настройке , показать план выполнения запроса или SQL Server Profiler .

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