2017-02-10 20 views
-1

私は、vb.netのTry-Catchステートメントの周りを頭で囲んでみようとしています。私は発生するSQL例外エラーを処理しようとしていますが、どうしたらよいか分かりません。以下のコードサンプルを含む特定のメソッドは、戻り値も期待しています。SqlException 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/catchブロックをスキップ通常にあります。

適切に設計されたアプリケーションを使用している場合、データベースアクセスは、UIまたはビジネスレイヤとは別の独自のクラス、アセンブリ、名前空間、またはそれらの組み合わせに抽象化されます。私の経験では、データベースコードでこれらの例外を処理することは、例外がより高いレベルの抽象化にバブルアップできるようにするほど役に立ちません。あなたはそこでそれに対処する方がよいでしょう。それはTry/Catchが何をしているかのようなものです。例外はその種の例外に最も適切なレベルで捕らえることができます。

あなたが何をしたいか分からないときは特にそうです。例外を処理する予定がない場合は、処理しないでください。 Try/Catchブロックを捨てて、他の誰かがより良い戦略を持っているかもしれないところで、例外のバブルをより高いレベルにしましょう。

+0

@Joel Coehoornさんからの返信ありがとうございます。私は明らかにこのトピックを読む必要があるが、あなたの投稿は私のための良いスタートだった。 – PixelPaul

0

ご使用のサーバーでそれを照会することができるように、MicrosoftのSQLサーバは、データベース内のエラーメッセージを格納します。

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