如何在 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 变量。这分别通过FillSchemaFill 方法完成。 接下来,找到要更新的行。由于您之前加载了架构,table 变量使用主键来查找行。我假设列 SKP 是您的该表的主键,因此,我使用您的 UPDATE 查询中的值“804401”作为用于查找行的值。 找到行后,您可以通过dataRow("<ColumnName>") = <value> 指定要更新的列和更新的值。 使用接收SqlDataAdapterSqlCommandBuilder,.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 中的更新语句的主要内容,如果未能解决你的问题,请参考以下文章

基于BP神经网络及Pygame创做坦克自动扫雷机

如何在 x86 实模式下正确设置 SS、BP 和 SP?

windbg-bp bm bu bl bc ba(断点硬件断点)

如何从 HDFS 中的 BP 文件夹中恢复数据

有一段长度约为1000bp的DNA序列,如何证明其中的PRD区(大约第60-100bp)表达的蛋白与特定蛋白有作用?

BP(Back Propagation)神经网络——原理篇