Я работаю над проектом, где мы должны запросить старую базу данных SQL Server 2000 (PeopleSoft, если вам нужно знать). Запрос возвращает набор результатов. Если бы мы были в более новой базе данных, я бы использовал хранимые процедуры и обработку ошибок (например, @ErrNo, @ErrMsg, Try/Catch), чтобы получить то, что я хочу.SQL Server ADO.Net извлекает информацию об ошибке из sql-скрипта
Однако мы находимся на SQL Server 2000, и нам НЕ разрешено использовать хранимые процедуры, поэтому нам остается использовать только динамические SQL-запросы и скрипты. В настоящее время мы используем ADO.Net (например, DbCommand и Execute methods) для получения нашего набора результатов.
Что я хотел бы сделать, это добавить больше ошибок/проверки правильности в наши SQL-скрипты и вернуть сообщения в наш .Net-код. (например, входное значение недействительно, строка не найдена и т. д.)
Кто-нибудь знает, как это сделать под этими ограничениями? Если нет простых способов сделать это, можете ли вы порекомендовать некоторые альтернативы? например
попросить DBA создать специализированную таблицу сообщений/протоколирования для нас и в наших сценариях, писать в эту таблицу и в нашем коде, прочитать, что таблица
перерыв наши кода/скрипты на несколько этапов и вызывать его из нашего кода .Net (тогда мы должны будем использовать транзакции?)
и т. д.? На самом деле ударяю головой ...
Спасибо всем.
Благодарим вас за отзыв, но моя ситуация не совсем такая. Например, у нас есть бизнес, когда пользователь вставляет новую строку данных, он должен быть активным/эффективным «на сегодняшний день, а не будущим. Это не применяется в пользовательском интерфейсе или БД. Таким образом, во время моей логики импорта/интеграции мне приходится обрабатывать три сценария: 1) получить ожидаемую запись, которая была только что вставлена, 2) не обнаружена запись (непредвиденная ситуация с ошибкой) или 3) строка существует, но недействительна и не должна возвращаться. Мне нужно провести различие между двумя последними сценариями. Это всего лишь один общий пример. – Raymond
Нет проблем - вам нужно создать бизнес-уровень, где вы заблокируете свою запись в транзакции. Запросить запись: если вы не нашли записи «RecordNotFoundException». Осмотрите запись на наличие ошибок, и если проблема - бросить 'RecordInvalidException'. И чтобы убедиться, что это не выполняется одновременно, есть хитрость для этого. Вы создаете таблицу DB, называемую «CriticalSectionLock». Там вы можете добавить несколько строк, например 'CustomerRecLock'. Вы блокируете эту запись в транзакции и до тех пор, пока вы ее не отпустите, ни один другой код не получит доступ к логике проверки логики. В общем, что вы думаете, хранит Proc, вам нужен BLL –