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プログラムでエラーが表示されません。
私のストアドプロシージャでエラーを表示するには、どのようなコードを書きますか?
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) 。 –
最初のMessageBox(これは古いVB6 MsgBoxではなく.NETでこれを使用するはずです)はカウントを表示しますか?通常、私はそれを心配することはありませんし、 'For Each ... Next'ループも気にしません。私のエラーハンドラは通常 'MessageBox.Show(SQLex.ToString)'を実行します。 'ToString'は例外の詳細を示していますので、' Message'プロパティはメッセージの説明だけを示しています。 – topshot