无法 运行 SQL 更新 vb.net 中的语句,

Can not run SQL update statement in vb.net,

我目前在 Visual Studio 2013 Express 中使用 SQL 服务器后端。我正在尝试做一个非常简单的更新语句,但由于某种原因,这件事不会 运行。我开始对这个简单的查询如何不 运行 感到沮丧。

此表单应该将零件号从一台机器转移到另一台机器。我有 3 个组合框,组合框 1 是 FromMachine,组合框 2 是机器,组合框 3 是零件号。

我的 SQL 服务器 table 有一个零件号和切割机的列。所有这些 运行 都发生在按钮单击事件中。请注意,零件号是日期时间,机器是整数。这是我的代码。

'Safety check
If Combobox1.SelectedIndex = -1 Then
        MsgBox("Please select a machine to move the Part from.")
        Exit Sub
End If

If Combobox2.SelectedIndex = -1 Then
        MsgBox("Please select a machine to move the part to.")
        Exit Sub
End If

If Combobox3.SelectedIndex = -1 Then
        MsgBox("Please select a part number to change from one cutting machine to another.")
        Exit Sub
End If

    Dim FromMachine As Integer = Combobox1.SelectedValue
    Dim ToMachine As Integer = Combobox2.SelectedValue
    Dim Part As DateTime = Combobox3.SelectedValue

    Try

        'sql command for the change
        'make sure that part isnt already on that machine
        Using conn1 As New SqlConnection(connstring)
            conn1.Open()
            Using comm1 As New SqlCommand("SELECT PartNumber FROM Table1 Where PartNumber = @PartNumber AND Machine = @ToMachine", conn1)
                comm1.Parameters.AddWithValue("PartNumber", Part)
                comm1.Parameters.AddWithValue("@ToMachine", ToMachine)
                Dim dt As New DataTable
                Dim sql As New SqlDataAdapter(comm1)
                sql.Fill(dt)
                DataGridView1.DataSource = dt
                'check for data entries
                If dt.Rows.Count > 0 Then
                    MsgBox("Part Number " & Combobox3.SelectedText & " is already assigned to " & Combobox2.SelectedText & ". This Part could not be changed.")
                    Exit Sub
                Else
                    'Make the change
                    Using conn2 As New SqlConnection(connstring)
                        conn2.Open()
                        Using comm2 As New SqlCommand("UPDATE table1 SET Machine = @ToMachine Where Machine = @FromMachine " _
                                                       & "AND PartNumber = @PartNumber", conn1)
                            comm1.Parameters.AddWithValue("@ToMachine", ToMachine)
                            comm1.Parameters.AddWithValue("@FromMachine", FromMachine)
                            comm1.Parameters.AddWithValue("@PartNumber", PartNumber)
                            comm1.ExecuteNonQuery()
                            MsgBox("PartNumber " & Combobox3.SelectedText & " has been changed from cutting machine " & Combobox1.SelectedText & " To cutting machine " & Combobox2.SelectedText & ".")
                        End Using
                        conn2.Close()
                    End Using
                End If
            End Using
            conn1.Close()
        End Using

    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

简而言之,combobox 1 是移动零件号的机器,combobox2 也是移动 aprt 的机器。第一个 sql 语句检查该零件是否已经在那台机器上,因为同一个零件永远不会在同一台机器上被切割两次。然后如果那个datagridviewreturns什么都没有,第二个sql语句将运行更新语句。

此外,所有组合框都是从 SQL 查询加载的,当我添加 watch 它们或将 SQL 语句插入我的可视化管理程序时,它们都具有正确的值。

------------更新------------

代码执行 运行 并且我已经逐步完成了它,但是,一旦代码完成,就没有对 SQL 服务器进行任何更改。我已将 SQL 更新语句放入 Management Studio 并插入值,我在我的 vb.net 程序中关闭了手表,它不会更改机器。它的行为就像在执行代码,但只是没有将其应用于 SQL 服务器。

------------更新------------ 错误是将 comm1 参数用于 comm2 并在 comm2 下执行 comm1。

您将参数添加到 comm1 而不是 comm2 并且执行了错误的命令(感谢@clweeks 的评论)。