2017-02-10 3 views
-1

Я пытаюсь обернуть свою голову вокруг Try-Catch операторов в vb.net. Я пытаюсь обработать ошибку исключения SQL, которая возникает, но я не уверен, что с ней делать? Конкретный метод, который содержит пример кода ниже, также ожидает возвращаемого значения.SqlException Try-Catch с vb.net

Try 
    Dim records As DataRecordCollection = Sql Insert SP call 
Catch sqlEx As SqlException 
    Select Case sqlEx.Number 
     Case 547 
     *****What goes here?***** 
     Case Else 
      Throw 
    End Select 
End Try 
+0

Что вы хотите, если произойдет SQLException номер 547? – Blackwood

+0

Я не уверен, что это за варианты? Думаю, чтобы не сбой программы. – PixelPaul

+0

Если вы можете восстановить ... восстановление. Это его фатальная отправка сообщения и прекращение изящества –

ответ

3

Вы можете положить все, что вы хотите там. Мы не можем дать вам ответ на этот вопрос, потому что это может быть что угодно. Он также может быть ничего; вам не нужно ничего вводить в этом месте, хотя обычно это плохая практика, чтобы просто проглотить такое исключение.

Дело в том, что вы положили там полностью на ваше приложение. Вы можете сделать запись в журнале или очистить ошибку, чтобы показать что-то приятнее для пользователя, или добавить другой код для восстановления или повторить попытку или даже все вышеперечисленное. Все что пожелаете. Но мы не можем знать, что вы хотите сделать. Это зависит от вас и вашей спецификации дизайна.

Кроме того, вы можете упростить этот код, используя условное исключение:

Try 
    Dim records As DataRecordCollection = Sql Insert SP call 
Catch sqlEx As SqlException When sqlEx.Number = 547 
    // Put whatever you want here 
End Try 

Наконец, в моем опыте самый лучший вариант, как правило, чтобы пропустить блок Try/Поймать на этом уровне полностью.

Если у вас хорошо разработанное приложение, доступ к базе данных абстрагируется от его собственного класса, сборки, пространства имен или их комбинации, которая отделена от пользовательского интерфейса или уровня Business. Мой опыт заключается в том, что обработка этих исключений в коде базы данных не так полезна, что позволяет исключению пузырей до более высокого уровня абстракции. Вы будете лучше иметь дело с этим. Это то, что Try/Catch - это все ... что исключения можно поймать на уровне, наиболее подходящем для такого исключения.

Это особенно актуально, когда вы даже не знаете, что хотите делать. Если у вас нет плана обработки исключения, тогда не обрабатывайте его. Погрузите блок Try/Catch и дайте исключению пузырь на более высокий уровень, где, возможно, у кого-то есть лучшая стратегия для него.

+0

Благодарим @Joel Coehoorn за ответ. Мне, очевидно, нужно почитать эту тему, но ваш пост стал для меня хорошим началом. – PixelPaul

0

магазинов Microsoft SQL Server, сообщения об ошибках в базе данных, так что вы можете запросить его на сервере:

select * from sys.messages where message_id = 427 and language_id = 1033 

Когда я запустить его на моем Sql Server 2016 Express, я получил следующий результат :

Could not load the definition for constraint ID %d in database ID %d. Run DBCC CHECKCATALOG to verify the integrity of the database. 

Я предлагаю вам отлаживать сообщение об ошибке не только номер, и вы получите дополнительную информацию о вашей проблеме. Поэтому, пожалуйста, запишите также сообщение об ошибке, напишите, что здесь и с этим мы сможем вам помочь.

Спасибо, Morzel

Смежные вопросы