无法 运行 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 的评论)。
我目前在 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 的评论)。