我目前正在使用SQL Server后端在Visual Studio 2013 Express中工作。我试图做一个非常简单的更新语句,但由于某种原因,这个东西不会运行。它开始挫败我如何这个简单的查询不会运行。无法在vb.net中运行SQL更新语句,
此表格应该将零件号码从一台机器移至另一台机器。我有3个组合框,combobox1是FromMachine,combobox2是机器,combobox 3是零件编号。
我的SQL Server表有一个零件号和切割机的列。所有这些都在按钮单击事件上运行。请注意,部件号是日期时间,机器是整数。这是我的代码。
'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
总之,组合框1是部件号被从移动的机器,并且combobox2是机器的是,APRT正在被移动了。第一个sql语句检查该部分是否已经在该机器上,因为相同的部分永远不会在同一台机器上被切割两次。然后,如果datagridview返回什么也没有,那么第二个sql语句将运行update语句。
此外,所有组合框都从SQL查询中加载,并且当我添加监视它们或将SQL语句插入到我的可视化管理程序时,它们都具有正确的值。
---------- UPDATE -------------
的代码并运行,我已经通过它加强,但是,一旦代码完成没有对SQL Server进行更改。我已将SQL更新语句放入Management Studio并插入值,我在vb.net程序中卸下了手表,并且它不会更改机器。它的行为就像它正在执行代码一样,但没有将其应用到SQL Server。
------------更新------------- 错误是使用comm1的comm1参数并在comm2下执行comm1。
而不是'AddWithValue'从参数值推断(可能不正确的)类型使用'Add(sqlParameterWithType).Value = value'。 –
什么不运行?你有错误吗?你是否浏览了代码? – Tim
@Tim我已经浏览了代码,并且没有收到错误消息。一旦代码运行,我再次检查它在服务器上,它只是没有做出改变。我已经添加了一个监视所有我的变量,他们都正确的SQL语句运行。 – Cheddar