2016-07-07 55 views
1

I持つSQL Serverで、ストアドプロシージャ、このような2014のエクスプレス:VB.NETプログラムにSQL Serverのストアドプロシージャでエラーメッセージが表示されます

CREATE PROCEDURE dtUmum.prCoba 
AS 
BEGIN 
BEGIN TRY 
    SET NOCOUNT ON; 
    SELECT 1/0; 
    SET NOCOUNT OFF; 
END TRY 
BEGIN CATCH 
    DECLARE @varErrorMessage NVARCHAR(4000), @varErrorSeverity INT, @varErrorState INT; 
    SELECT @varErrorMessage = ERROR_MESSAGE(), @varErrorSeverity = ERROR_SEVERITY(), @varErrorState = ERROR_STATE(); 
    RAISERROR(@varErrorMessage,@varErrorSeverity,@varErrorState); 
END CATCH; 
END 

私はこのようにSQL Server Management Studioでストアドプロシージャを実行する場合:

EXECUTE dtUmum.prCoba; 

私はメッセージ]タブで、このエラーが表示されます。

メッセージ50000、レベル16、状態1、プロシージャprCoba、ライン33
ゼロで除算エラーが発生しました。

私のvb.net windowsフォームプログラムでこのメッセージを表示します。

私のフォームでは、1ボタンと1データグリッドビューを追加します。このような方法button_click

マイコード:

Try 
    Using cn As New SqlConnection("Server=.\SQLEXPRESS;Database=myDB;Integrated Security=True") 
     cn.Open() 
     Using cmd As New SqlCommand() 
      cmd.Connection = cn 
      cmd.CommandType = CommandType.StoredProcedure 
      cmd.CommandText = "dtUmum.prCoba" 
      Using da As New SqlDataAdapter(cmd) 
       Dim dt As New DataTable 
       da.Fill(dt) 
       da.FillSchema(dt, SchemaType.Source) 
       Me.DataGridView1.DataSource = dt 
      End Using 
     End Using 
     cn.Close() 
    End Using 
Catch SQLex As SqlException 
    Dim SSS As SqlError 
    MsgBox("Count = " & SQLex.Errors.Count) 
    For Each SSS In SQLex.Errors 
     MsgBox(SSS.Message) 
    Next 
End Try 

は、このコードは私のvb.netプログラムでエラーが表示されません。

私のストアドプロシージャでエラーを表示するには、どのようなコードを書きますか?

+0

DataAdapterを使用する代わりに、DataTableに 'dt.Load(cmd.ExecuteReader())'を入力してみましたか? Ref:MarkNの最後から2番目の[SqlDataAdapterとRAISERRORs]のポスト(https://social.msdn.microsoft.com/Forums/en-US/ad135c3f-2afb-40aa-9eff-28cff08514c3/sqldataadapter-and-raiserrors?forum=adodotnetdataproviders) 。 –

+0

最初のMessageBox(これは古いVB6 MsgBoxではなく.NETでこれを使用するはずです)はカウントを表示しますか?通常、私はそれを心配することはありませんし、 'For Each ... Next'ループも気にしません。私のエラーハンドラは通常 'MessageBox.Show(SQLex.ToString)'を実行します。 'ToString'は例外の詳細を示していますので、' Message'プロパティはメッセージの説明だけを示しています。 – topshot

答えて

0

Andrew Mortonのコメントから回答が見つかりました。 私はdt.Load(cmd.ExecuteReader())を使用しています。

関連する問題