StoredProcedure在SSMS中执行,而不是在VB.NET应用程序中执行(不抛出SqlException)

时间:2018-03-08 09:55:58

标签: sql-server vb.net stored-procedures

我有一个SQL StoredProcedure,可以按预期在SSMS中执行两个INSERT INTO操作。 在我的VB.NET应用程序中执行此SP时,它正在执行(SqlException块中没有Try抛出)但不执行INSERT INTO命令。 这个应用程序使用了许多可以正常工作的SP。

代码如下:

            Using (ParentMDI.dbCon)
                Dim sqlcmd As New SqlCommand("hyd_top_level_isr")
                With sqlcmd
                    .CommandType = CommandType.StoredProcedure
                    .Parameters.AddWithValue("@part_num", part_num)
                    .Parameters.AddWithValue("@issue", issue)
                End With
                Try
                    sql.ExecuteNonQuery()
                Catch ex As SqlException
                    If DialogResult.Yes = MessageBox.Show("Error inserting top-level ISR." & vbCrLf & vbCrLf & "Send Error Report?", "Workflow Error", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) Then
                        ParentMDI.emailerrorstring = "Stored Procedure: hyd_top_level_isr"
                        ParentMDI.emailerrormessage = ex.Message
                        ParentMDI.ErrorEmail()
                    End If
                End Try
            End Using

澄清;

我在ExecuteNonQuery()之前插入了断点。 sub确实执行ExecuteNonQuery(),并且传递的参数将填充正确的值。 我还在SP中插入RETURN以返回SCOPE_IDENTITY()。这会返回一个空字符串(不是NULL,正如我所料)。

如果您有任何需要更多信息,请告诉我们。 我将非常感谢任何能够教育我出错的人!

(这是我第一次寻求帮助,请善待!):)

编辑: 对不起大家。我似乎错误地引导你。上面粘贴的代码是我尝试各种尝试解决此问题的尝试。我现在发布的内容就是我应该首先发布的内容。结果相同。很抱歉这个混乱,感谢您迄今为止的尝试......

            Dim sqlcmd As New SqlCommand("hyd_top_level_isr", ParentMDI.dbCon)
            With sqlcmd
                    .CommandType = CommandType.StoredProcedure
                    .Parameters.AddWithValue("@part_num", part_num)
                    .Parameters.AddWithValue("@issue", issue)
                End With
            Try
                sqlcmd.ExecuteNonQuery()
            Catch ex As SqlException
                If DialogResult.Yes = MessageBox.Show("Error inserting top-level ISR." & vbCrLf & vbCrLf & "Send Error Report?", "Workflow Error", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) Then
                    ParentMDI.emailerrorstring = "Stored Procedure: hyd_top_level_isr"
                    ParentMDI.emailerrormessage = ex.Message
                    ParentMDI.ErrorEmail()
                End If
            End Try

2 个答案:

答案 0 :(得分:0)

除了@Zohar Peled的评论之外,我认为你应该设置sqlCmd的连接并使用sqlCmd.ExecuteNonQuery。下面你还应该使用本地sqlConnection。

Using sqlcmd As New SqlCommand("hyd_top_level_isr", ParentMDI.dbCon)
    With sqlcmd
        .CommandType = CommandType.StoredProcedure
        .Parameters.AddWithValue("@part_num", part_num)
        .Parameters.AddWithValue("@issue", issue)
    End With
    Try
        sqlCmd.ExecuteNonQuery()
    Catch ex As SqlException
        '' Handle exception here
    End Try
End Using

答案 1 :(得分:0)

首先,我认为在SQLCommand中你应该传递SQL连接,如:

Dim sqlcmd As New SqlCommand("hyd_top_level_isr", ParentMDI.dbCon)

其次,您不是运行sqlcmd而是运行sql.executenonquery。

第三,executenonquery是一个整数。如果你变暗一个变量:

Dim result = sqlcmd.ExecuteNonQuery()

你得到了什么?