首页 > 解决方案 > 请问我添加数量后如何将所有数据链接到另一个datagridview?

问题描述

我面临的一个问题是如何在插入苹果产品数量后链接所有数据信息。例如,我插入苹果产品,它有 5 个数量,我添加 5 后它将变为 10,它将显示产品苹果 10 数量。现在我的代码只显示 10 个数量,它不会显示产品苹果 10 个数量

Private Sub loadTransactions(ByVal transactionid As Integer)

    Dim cmd As New OleDb.OleDbCommand
    'open connection if it is not open yet
    cnn.Open()
    cmd.Connection = cnn
    If Not cnn.State = ConnectionState.Open Then
        'open connection
        cnn.Open()
    End If
    Dim da As New OleDb.OleDbDataAdapter("SELECT s.cid as [ID], c.CheckerName as item_name, " & _
                                        "s.CheckerName as [CheckerName], s.ShipQuantity as [StockQuantity], s.[Date] as [Date], s.CompanyName as [CompanyName], s.CheckerDetail as [CheckerDetail]" & _
                                        " FROM stock s left join checker c on c.cid = s.checkercid where s.checkercid = " & transactionid & " ORDER BY s.cid", cnn)

    cmd.CommandText = "INSERT INTO stock([CheckerDetail]) " & "VALUES('" & Me.txtdetail1.Text & "')"

    Dim dt As New DataTable
    da.Fill(dt)
    Me.DataGridView1.DataSource = dt
    Me.DataGridView1.Columns("item_name").HeaderText = "ItemName"
    'close connection
    cnn.Close()
End Sub
product     quantity  
apple          5  
              10

标签: vb.netms-access

解决方案


  1. 将数据库对象保存在本地,以便确保它们已关闭和处置。人脉是宝贵的资源。即使有Using ... End Using错误,块也会这样做。

  2. 直到最后一刻才打开连接,并尽快关闭它。将连接字符串传递给连接的构造函数。

  3. 将 Sql 字符串和连接传递给命令的构造函数

  4. 始终使用参数来防止 Sql 注入并使格式化 Sql 字符串更容易。在 Access 中,参数的名称无关紧要。它们出现在 Sql 字符串中的顺序必须与它们添加到参数集合的顺序相匹配。

  5. 我认为你想更新苹果记录而不是插入一个全新的记录。您可以通过 2 种不同的方式执行此操作。一种方法是通过向字段中的现有值添加值来更新数量字段。另一种方法是直接使用新数量进行更新。

Private Sub loadTransactions(ByVal transactionid As Integer)
    Dim dt As New DataTable
    Using cnn As New OleDbConnection("Your connection string")
        Using cmd As New OleDbCommand("SELECT s.cid as [ID], 
                                              c.CheckerName as ItemName,
                                              s.CheckerName, 
                                              s.ShipQuantity as [StockQuantity], 
                                              s.[Date], 
                                              s.CompanyName, 
                                              s.CheckerDetail  
                                     FROM stock s left join checker c on c.cid = s.checkercid 
                                     WHERE s.checkercid = @transactionID 
                                     ORDER BY s.cid", cnn)
            cmd.Parameters.Add("transactionID", OleDbType.Integer).Value = transactionid
            cnn.Open()
            dt.Load(cmd.ExecuteReader)
        End Using
    End Using
    DataGridView1.DataSource = dt
End Sub

Private Sub UpdateStock(transactionid As Integer)
    Using cnn As New OleDbConnection("Your connection string")
        Using cmd As New OleDbCommand("Update stock Set CheckerDetail = CheckerDetail + @detail WHERE checkercid = @transactionID;", cnn)
            cmd.Parameters.Add("@detail", OleDbType.Integer).Value = CInt(txtdetail1.Text)
            cmd.Parameters.Add("@transactionID", OleDbType.Integer).Value = transactionid
            cnn.Open()
            cmd.ExecuteNonQuery()
        End Using
    End Using
End Sub

推荐阅读