使用@values更新MS SQL行

Ste*_*hRT 1 sql vb.net sql-server sql-update

是否可以使用我现有的INSERT代码并让它执行相同的操作但更新

示例是:

ID  | formTitle1 | formTitle2 | formTitle3 | formTitle4
-------------------------------------------------------
20  | The Rock   | Booker     | The Vine   | Keys
Run Code Online (Sandbox Code Playgroud)

如果我想更新所有4行,那么我想我可以这样做吗?:

sql = "UPDATE formSettings " & _
      "SET (formTitle1, formTitle2, formTitle3, formTitle4) " & _
      "VALUES (@formTitle1, @formTitle2, @formTitle3, @formTitle4) " & _
      "WHERE ID = '" & theID & "'"

Dim updateCmd As New SqlCommand(sql, myCONN)
updateCmd.Parameters.Add("@formTitle1", SqlDbType.VarChar)
updateCmd.Parameters.Add("@formTitle2", SqlDbType.VarChar)
updateCmd.Parameters.Add("@formTitle3", SqlDbType.VarChar)
updateCmd.Parameters.Add("@formTitle4", SqlDbType.VarChar)

updateCmd.Parameters("@formTitle1").Value = "changed1"
updateCmd.Parameters("@formTitle2").Value = "changed2"
updateCmd.Parameters("@formTitle3").Value = "changed3"
updateCmd.Parameters("@formTitle4").Value = "changed4"

myCONN.Open()
updateCmd.ExecuteScalar()
myCONN.Close()
Run Code Online (Sandbox Code Playgroud)

应该更新到:

ID  | formTitle1 | formTitle2 | formTitle3 | formTitle4
-------------------------------------------------------
20  | changed1   | changed2   | changed3   | changed4
Run Code Online (Sandbox Code Playgroud)

我知道我有错误的UPDATE语法,但我不确定这是否可能?

Joh*_*Woo 5

你有更新的无效语法,它应该是

sql = "UPDATE formSettings " & _
      "SET formTitle1 = @formTitle1, formTitle2 = @formTitle2, formTitle3 = @formTitle3, formTitle4 = @formTitle4 " & _
      "WHERE ID = @ID"
Run Code Online (Sandbox Code Playgroud)

并参数化你的ID,你现在将有5个参数

还将您的代码重组为此,

  • 使用USING声明
  • 添加异常处理

片段中,

Dim _sql As String = "UPDATE formSettings " & _
      "SET formTitle1 = @formTitle1, formTitle2 = @formTitle2, formTitle3 = @formTitle3, formTitle4 = @formTitle4 " & _
      "WHERE ID = @ID" 
Using conn As New SqlConnection("connectionStringHere")
    Using comm As New SqlCommand()
        With comm
            .Connection = conn
            .CommandType = CommandType.Text
            .CommandText = _sql
            .Parameters.AddWithValue("@formTitle1", "changed1")
            .Parameters.AddWithValue("@formTitle2", "changed2")
            .Parameters.AddWithValue("@formTitle3", "changed3")
            .Parameters.AddWithValue("@formTitle4", "changed4")
            .Parameters.AddWithValue("@ID", theID)
        End With
        Try
            conn.Open()
            comm.ExecuteNonQuery()
        Catch ex As SqlException
            ' do something on the error
            ' do not hide it!
        End Try
    End Using
End Using
Run Code Online (Sandbox Code Playgroud)

来源