添加数量后,请问如何将所有数据链接到另一个datagridview?

时间:2019-06-25 05:19:13

标签: vb.net ms-access

我面临的一个问题是,在插入苹果产品数量之后,如何链接所有数据信息。例如,我插入有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

1 个答案:

答案 0 :(得分:0)

  1. 将数据库对象保留在本地,以便您可以确保关闭并处置它们。连接是宝贵的资源。即使有错误,Using ... End Using块也会执行此操作。

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

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

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

  5. 我认为您想更新Apple记录而不是插入全新的记录。您可以通过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