VB.NET cmd.CommandText 无法与 sql 更新一起正常工作

Posted

技术标签:

【中文标题】VB.NET cmd.CommandText 无法与 sql 更新一起正常工作【英文标题】:VB.NET cmd.CommandText is not working properly with sql update 【发布时间】:2021-05-25 09:35:43 【问题描述】:

这是我的减法按钮,它只会减去我数据库中的数量,但数学逻辑是错误的,例如,如果我说 12-2 它会将数量更新为 6

    If con.State = ConnectionState.Open Then
        con.Close()

    End If
    con.Open()


    Try
        If con.State = ConnectionState.Open Then
            con.Close()

        End If

        con.Open()

        cmd = con.CreateCommand()
        cmd.CommandType = CommandType.Text


        cmd.CommandText = "UPDATE tablekongbago SET qty = qty + 2 WHERE Id = 2"
        cmd.CommandType = "UPDATE tablekongbago SET qty = (qty - 2) WHERE Id = 2"
        cmd.CommandText = "update tablekongbago set qty = qty - " + Convert.ToInt32(qtybox1.Text) + "WHERE Id = 2"
        cmd.CommandText = "UPDATE tablekongbago SET qty = qty - 2 WHERE Id = " & 2 & ""
        cmd.CommandText = "UPDATE tablekongbago SET qty = qty - " + Convert.ToInt32(2) + " WHERE Id = 2"

这 5 个“cmd.CommandText 中的任何一个都不能正常工作,它会加减,但它更新到数据库的数量是错误的,它会产生错误的输出,例如 (12 - 2 = 6)

        cmd.ExecuteNonQuery()
        Dim dt As New DataTable()
        Dim da As New SqlDataAdapter(cmd)

        da.Fill(dt)
        Dim dr As SqlClient.SqlDataReader
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
        While dr.Read

            qty = dr.GetInt32(3).ToString()




        End While

    Catch ex As Exception

    End Try

    MessageBox.Show("Subtracted Successfully")

【问题讨论】:

你的 sql 后端是什么(mysql、Oracle、Sql Server 等)?请注意,SQL UPDATE DML 语句的输出是更新的记录数,而不是您的数量 我在 Visual Studio 中使用 MySQL mdf 数据库,使用 cmd.CommandText = "",我想更改数量,“UPDATE table SET qty = 12 WHERE Id = 2”有效,但“UPDATE table SET qty = qty -2 WHERE Id =2" 没有,我的数量是 12,但是每当我使用“UPDATE table SET qty = qty -2 WHERE Id =2”时,数量就会变为 6。 如果有,能否检查table 上是否有任何触发器(特别是UPDATE 一个)? “我正在使用 MySQL mdf 数据库”。嗯?不你不是。如果您使用的是 MDF 数据文件,那么那是 SQL Server,而不是 MySQL。如果SqlClient 提供程序完全有效,那么您必须使用 SQL Server。 【参考方案1】:

您首先在命令上调用ExecuteNonQuery,这将从当前值中减去 2。接下来,您在其SelectCommand 中使用相同的命令创建一个数据适配器,然后调用Fill,它将再次执行相同的命令并减去另一个2。最后,您再次在同一命令上调用ExecuteReader,这将减去另一个 2. 告诉我,(12 - 2 - 2 - 2) 是什么?该命令完全按照应有的方式工作。你只是无缘无故地执行了两次。

在那种情况下,您为什么要使用数据适配器和数据读取器?任何地方都没有SELECT 语句,FillExecuteReader 都用于执行查询,即SELECT 语句。

【讨论】:

非常感谢,现在它可以正常工作了,我只是注释掉了,我不太明白你说的那部分代码,我只是从我的 datagridview 函数中复制了该代码

以上是关于VB.NET cmd.CommandText 无法与 sql 更新一起正常工作的主要内容,如果未能解决你的问题,请参考以下文章

在 vb.net 中更新后刷新数据网格视图

PDF 生成后无法打开 (vb.net) (asp.net)

无法获取进程名称(vb.net)

vb.net SQL更新查询无法完成

无法让 Protobuf-net 与 vb.net 一起使用

字符串攻防实体类数据访问类