如何在 BP 自动化中使用 SQLDataAdapter 中的更新语句
Posted
技术标签:
【中文标题】如何在 BP 自动化中使用 SQLDataAdapter 中的更新语句【英文标题】:How to Use an Update Statement in SQLDataAdapter in BP automate 【发布时间】:2020-08-07 19:41:59 【问题描述】:我无法使用此代码更新表,请告诉我如何修复: 我使用的用户获得了对表的插入授权
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
【问题讨论】:
非常感谢您的帮助 您遇到的错误是什么?您说数据库用户具有 INSERT 权限,但您正在执行 UPDATE。也许更改权限? 在调用“填充”之前未启动属性“SelectCommand”。此外,包括更新在内的所有权限都设置为用户 您正在尝试使用 SQL 查询的结果填充数据集,当您启动UPDATE
时没有结果;不是SELECT
。您是否尝试在更新数据库后检索结果,因为这是两个不同的事务。
是的,我只想更新输出,但下面的代码仍然不起作用:
【参考方案1】:
This article 提供有关如何使用SqlDataAdapter
执行更新的指南。
-
首先,您需要使用要更新的目标表的架构信息和该表中当前的数据填充
dataSet
变量。这分别通过FillSchema
和Fill
方法完成。
接下来,找到要更新的行。由于您之前加载了架构,table
变量使用主键来查找行。我假设列 SKP
是您的该表的主键,因此,我使用您的 UPDATE 查询中的值“804401”作为用于查找行的值。
找到行后,您可以通过dataRow("<ColumnName>") = <value>
指定要更新的列和更新的值。
使用接收SqlDataAdapter
的SqlCommandBuilder
,.NET 将自动构建用于更新表的SQL 语句。或者,您可以根据需要编写自己的 SQL。
在您的 SqlDataAdapter
上调用 Update()
方法并传入要更新的表的数据集和要更新的表名称。
'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
当然,我在某些地方有硬编码值,您需要对其进行参数化。
【讨论】:
以上是关于如何在 BP 自动化中使用 SQLDataAdapter 中的更新语句的主要内容,如果未能解决你的问题,请参考以下文章
windbg-bp bm bu bl bc ba(断点硬件断点)