2015-05-04 34 views
1

我目前正在使用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。

+1

而不是'AddWithValue'从参数值推断(可能不正确的)类型使用'Add(sqlParameterWithType).Value = value'。 –

+2

什么不运行?你有错误吗?你是否浏览了代码? – Tim

+0

@Tim我已经浏览了代码,并且没有收到错误消息。一旦代码运行,我再次检查它在服务器上,它只是没有做出改变。我已经添加了一个监视所有我的变量,他们都正确的SQL语句运行。 – Cheddar

回答

3

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

+0

并执行comm1。 – clweeks

+1

就是这样。这很尴尬。 – Cheddar