【问题标题】:Updating 3 Rows (fixed) Using 1 UPDATE Statement使用 1 个 UPDATE 语句更新 3 行(固定)
【发布时间】:2014-06-10 02:40:35
【问题描述】:

到目前为止,我的代码只更新了 1 行,但有没有办法指定三行? (3 个不同的 ID)

Public Shared Sub UpdatePrice(ByVal NewPrice As Decimal, ByVal id As Integer)

    Dim dtoffenseinfo As New DataTable

    If Not DBConnection.State = ConnectionState.Open Then
        'open connection
        DBConnection.Open()
    Else

    End If

    cmd.Connection = DBConnection

    cmd.CommandText = "UPDATE tblStockPrice " & _
                   " SET Price=" & NewPrice & " WHERE id=" & id & ""


    cmd.ExecuteNonQuery()

    DBConnection.Close()
End Sub

我假设我还需要另外两行的 2 个参数,这样就可以了。

【问题讨论】:

  • 您想为所有三行设置相同的价格吗?
  • search conditionwhere clause 中使用and 我假设您使用的是 Ms Sql 服务器,因为您没有指定后端。
  • 哦,不对,价格不一样。 @S。安
  • 你使用的是什么 sql 后端?
  • @zespri 哎呀。只需 MS Access。

标签: vb.net ms-access oledb


【解决方案1】:

您可以使用带有适当WHERE 子句的UPDATE 语句来影响多条记录,但是,如果您想以不同方式影响每条记录,调用ExecuteNonQuery 一次不是一个很好的选择。只需创建一个带有适当参数的命令,然后您可以多次设置每个参数的Value 以影响多条记录,例如

Using connection As New SqlConnection("connection string here"),
      command As New SqlCommand("UPDATE MyTable SET Price = @Price WHERE Id = @Id", connection)
    Dim priceParameter = command.Parameters.Add("@Price", SqlDbType.Money)
    Dim idParameter = command.Parameters.Add("@Id", SqlDbType.Int)

    Dim prices = {12.45, 132.67, 9.8}
    Dim ids = {1, 19, 56}

    connection.Open()

    For i = 0 To 2
        priceParameter.Value = prices(i)
        idParameter.Value = ids(i)

        command.ExecuteNonQuery()
    Next
End Using

【讨论】:

  • 谢谢!我想没有使用循环转义。干杯。
  • @user3522506 有人报告说使用 DAO 代替 OLEDB 是可行的。
  • @zespri,在这种情况下使用 DAO 毫无意义。在这种情况下,要更新的行数非常少,因此没有获得真正的优势。
  • @user3522506,您可以将您的记录添加到DataTable 并将每个DataRowRowState 设置为Modified,使用适当的UpdateCommand 创建一个数据适配器,然后保存只需调用Update 即可完成所有更改。你不会真的节省太多,如果有的话,代码方面,你很可能不得不使用循环来填充DataTable
猜你喜欢
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 2012-10-31
  • 2012-02-22
  • 2023-03-11
  • 2021-03-29
相关资源
最近更新 更多