如何在 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
.
执行更新的指南
- 首先,您需要使用要更新的目标 table 的架构信息和当前在所述 table 中的数据填充
dataSet
变量。这是分别通过 FillSchema
和 Fill
方法完成的。
- 接下来,找到您要更新的行。由于您之前加载了架构,因此
table
变量使用主键来查找行。我假定列 SKP
是此 table 的主键,因此,我使用 UPDATE 查询中的值“804401”作为用于查找行的值。
- 找到该行后,您可以通过执行
dataRow("<ColumnName>") = <value>
. 指定要更新的列以及要将其更新到的值
- 使用接受您的
SqlDataAdapter
的 SqlCommandBuilder
,.NET 将自动构建 SQL 语句以更新 table。或者,您可以根据需要编写自己的 SQL。
- 在您的
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
当然,我在某些地方有硬编码值,您需要对其进行参数化。
我无法使用此代码更新 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
.
- 首先,您需要使用要更新的目标 table 的架构信息和当前在所述 table 中的数据填充
dataSet
变量。这是分别通过FillSchema
和Fill
方法完成的。 - 接下来,找到您要更新的行。由于您之前加载了架构,因此
table
变量使用主键来查找行。我假定列SKP
是此 table 的主键,因此,我使用 UPDATE 查询中的值“804401”作为用于查找行的值。 - 找到该行后,您可以通过执行
dataRow("<ColumnName>") = <value>
. 指定要更新的列以及要将其更新到的值
- 使用接受您的
SqlDataAdapter
的SqlCommandBuilder
,.NET 将自动构建 SQL 语句以更新 table。或者,您可以根据需要编写自己的 SQL。 - 在您的
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
当然,我在某些地方有硬编码值,您需要对其进行参数化。