Обработка ошибок SQL Server: исключения и контракт клиента базы данных

Чтобы ответить на ваш «более широкий» вопрос, вы должны использовать asyncio в сочетании с requests или аналогичными пакетами. Достойное руководство для этого можно найти здесь здесь . Потоки не созданы для выполнения асинхронных HTTP-запросов.

Я не могу показать вам, как писать код с помощью asyncio, потому что я сам не знаю, как его использовать, и для его завершения, вероятно, потребуются сотни строк кода.

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

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome('YOUR_CHROMEDRIVER_PATH_HERE', chrome_options=options)

6
задан gbn 3 November 2010 в 18:06
поделиться

3 ответа

Я обычно использую выходной параметр - и определяю возможные значения.

0 = успех
Целое положительное число (скажем, на вставке) = новый идентификатор строки (@@ identity)

отрицательное целое число = известные возможные условия ошибки
-1 = отсутствует @LastName (или нулевая длина)
-2 = отсутствует @FirstName (или нулевая длина)
... и т. д.

Это становится немного утомительным для определения - но это может быть расширяемым - и это способ получить значимые результаты обратно вашим клиентам и для уровня доступа к данным для передачи обратно бизнес-объектам слой точную причину сбоя (я использую перечисления в слое Business Objects для разных состояний).

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

Существуют и другие методы - это только один, который я использовал с некоторым успехом в прошлом.

2
ответ дан 10 December 2019 в 02:53
поделиться

вот моя рекомендация:

вернуть 0, когда все в порядке
вернуть отрицательный x, когда возникает логическая ошибка, отсутствуют или недействительные данные
вернуть положительный x, когда происходит фатальная ошибка, сбой вставки и т. д.

добавить выходные параметры ErrorMsg и ErrorLog в хранимые процедуры. ErrorMessage будет содержать удобочитаемое сообщение, ErrorLog будет содержать отладочную информацию.
Они будут NULL, если вернется 0
Вы можете использовать ErrorLog для записи любых проблем, убедитесь, что если вы вставляете их в таблицу, вы делаете это после отката.

используйте TRY - Catch для выявления проблем, создания собственного сообщения и возврата информации с использованием вышеуказанных соглашений.

2
ответ дан 10 December 2019 в 02:53
поделиться

At my current job, we reserve exceptions for exceptional conditions. For things like bad parameters or the like, we have standard return codes - invalid parameter values always return 98, for example. (why 98? that's lost to history...)

This is not necessarily ideal b/c both the client and the SP have to understand what a particular return code means; it's a bad separation of concerns.

In special cases, we use OUT parameters to return messages, and our batch services use a standardised #scratch table setup.

At a prior employer, we used custom SQL errors for the same purposes. So, use what makes sense. Personally, I prefer a single mechanism but that may not be possible depending on your environment.

Maybe you all ought to get together to develop standardised ways for the client code to handle it. The VBA used in Excel has distinct limitations that the C# and Java code don't, and as similar as Java & C# are to each other, they're not identical. If you're going to stick with returning exceptions, then if you can agree on a) a known message # range that indicate "error" exceptions and b) a standardised message layout so that standardised parsing can occur, the developers would be 90% done.

2
ответ дан 10 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: