在VB.NET中更新或插入SQL记录的最佳(简单)方法是什么?

时间:2014-02-25 16:01:31

标签: sql sql-server vb.net sqlcommand upsert

我一直在摸索我的方式虽然用SQL数据库访问编写了我的第一个应用程序,并且我使用system.data.sqlclient.sqlcommand使用单个命令并且执行以下操作:

SQLCmd.CommandText = ("DELETE from ContactRelationships WHERE ID = 'someid'")
SQLCmd.ExecuteNonQuery()

或者在表单上存储更改,然后保存或取消它们:

Dim x As New SqlCommand("DELETE from SharedDataLocations where Location = @Loc and UserID= @UID ;--", cnn)
        x.Parameters.Add("@Loc", SqlDbType.NVarChar, 300).Value = strRemDLoc
        x.Parameters.Add("@UID", SqlDbType.Int).Value = UserID
        PendingSQLChanges.Add(x)
'followed later by
For x = 0 To PendingSQLChanges.Count - 1
            PendingSQLChanges(x).ExecuteNonQuery()
        Next
        PendingSQLChanges.Clear()

我还没有解决比这更复杂的事情,但我愿意学习。我现在需要做的是获取当前STAFF记录的id,看看它是否已经在STAFFMANAGERS关系表中设置,并使用来自MANAGERS表的刚刚选择的id更新它,或者如果管理器不是,则创建记录以前设定。此时,staff和manager id都存储在表单变量中,因此可以插入到任何SQL命令中。

我已经看到了可以这样做的各种方法,比如在SQLCmd.commandtext中添加多行(虽然我不确定格式是否这样)但是我不知道这是不是一个万无一失的解决方案或容易出现问题,或者它是否会起作用。

如果没有从我目前的经历中拉得太远(或者给我一个更复杂的东西的深入解释),我怎样才能最好地完成这个?

2 个答案:

答案 0 :(得分:0)

我不确定这是否会有所帮助,但我的VB.NET SQL代码中有类似内容。我所做的是使用IF THEN语句来检查记录是否存在。如果没有记录,那么它将使用新的UID插入它,但如果UID已经存在,它将更新。

Public Class YourForm
     Private UniqueID as Integer

Private Sub 
    If AddRecord Then 
        SQLCmd.CommandText = "INSERT into YourTableName (YourColumnName1,YourColumnName2) values (" & _
        "'" & YourTextBox.Text & "')")
        Else
           RunSql ("Update YourTableName set YourColumnName='" & YourTextBox.Text & "')" & _
         " where YourUID=" & UniqueID)
End Sub
End Class

答案 1 :(得分:0)

也许你需要MERGE statement