1
我在SQL Server中的存储过程2014和快递这样的:获取错误消息VB.NET程序
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窗口窗体程序中。
在我的表单中,我添加了1个按钮和1个datagridview。
我的方法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,你尝试用'dt.Load(cmd.ExecuteReader())'填充DataTable吗?参考:MarkN在[SqlDataAdapter和RAISERRORs]的倒数第二个帖子(https://social.msdn.microsoft.com/Forums/zh-CN/ad135c3f-2afb-40aa-9eff-28cff08514c3/sqldataadapter-and-raiserrors?forum=adodotnetdataproviders) 。 –
第一个MessageBox(你应该在.Net而不是旧的VB6 MsgBox中使用它)显示计数吗?通常情况下,我不会为此或“For Each ... Next”循环而烦恼。我的错误处理程序通常只会执行'MessageBox.Show(SQLex.ToString)'。 'ToString'显示异常的完整细节,所以它不是很漂亮,而'Message'属性只显示消息描述。 – topshot