如何在 BP 自动化中使用 SQLDataAdapter 中的更新语句

How to Use an Update Statement in SQLDataAdapter in BP automate

我无法使用此代码更新 table,请告诉我如何修复: 我使用的用户获得了对 table

的插入授权

SQL查询

UPDATE [UFC].[dbo].[CreateProfile]
SET ATTEMPT = '4'
WHERE SKP = 804401;

按照建议我尝试使用下面的代码,不幸的是也不起作用:


' Assume success
Success = True
Message = ""

Try
    Using cmd As New SqlCommand()
        cmd.Connection = moConnection
        cmd.Transaction = moTransaction
        cmd.CommandText = SQL

        Using adapter As New SqlDataAdapter()
            adapter.UpdateCommand = cmd //------comment:when use 
        End Using
    End Using

Catch ex As Exception
    Success = False
    Message = ex.Message

End Try

This article 提供有关如何使用 SqlDataAdapter.

执行更新的指南
  1. 首先,您需要使用要更新的目标 table 的架构信息和当前在所述 table 中的数据填充 dataSet 变量。这是分别通过 FillSchemaFill 方法完成的。
  2. 接下来,找到您要更新的行。由于您之前加载了架构,因此 table 变量使用主键来查找行。我假定列 SKP 是此 table 的主键,因此,我使用 UPDATE 查询中的值“804401”作为用于查找行的值。
  3. 找到该行后,您可以通过执行 dataRow("<ColumnName>") = <value>.
  4. 指定要更新的列以及要将其更新到的值
  5. 使用接受您的 SqlDataAdapterSqlCommandBuilder,.NET 将自动构建 SQL 语句以更新 table。或者,您可以根据需要编写自己的 SQL。
  6. 在您的 SqlDataAdapter 上调用 Update() 方法并传入要更新的 table 数据集和要更新的 table 名称。
'Assume success
Success = True
Message = ""
Dim dataSet As DataSet = New DataSet("UpdateDataSet")

Try
    Using adapter As New SqlDataAdapter("SELECT * FROM CreateProfile", moConnection) 'Note - I don't recommend selecting everything, but for brevity I did
        adapter.FillSchema(dataSet, SchemaType.Source, "CreateProfile")
        adapter.Fill(dataSet, "CreateProfile")
        Dim table As DataTable = dataSet.Tables("CreateProfile")
        Dim dataRow As DataRow = table.Rows.Find("804401")
        dataRow("Attempt") = "4"
        Dim objCommandBuilder As SqlCommandBuilder = New SqlCommandBuilder(adapter)
        adapter.Update(dataSet, "CreateProfile")
    End Using
Catch ex As Exception
    Success = False
    Message = ex.Message
End Try

当然,我在某些地方有硬编码值,您需要对其进行参数化。