如何在 VB.NET 中使用 dapper 从 datagridview 更新 MS-ACCESS 数据库

how to update MS-ACCESS database from datagridview with dapper in VB.NET

提问人:roy 提问时间:8/23/2023 最后编辑:roy 更新时间:8/26/2023 访问量:77

问:

以前我通过将数据表循环到数据库来执行 sql 插入,但现在我想使用 dapper 更新到数据库,请指导我,以便我所采用的方法不会出错,因为稍后此过程将与库存项目数量有关。

谢谢

Public Class Form2
    Inherits Form
 Dim itrservice As New ItemtransfersService()
    Sub New()
        InitializeComponent()
    End Sub
 Public Sub New(item As ItemTransfers)
        Me.New
 DataGridView1.DataSource = itrservice.GetItemTransfersDetail(item.Invno)
        DataGridView1.Columns(1).Visible = False
 TextBox1.Text = item.Invno
        TextBox2.Text = item.Created
 Private Sub BtnUpdate_Click(sender As Object, e As EventArgs) Handles BtnUpdate.Click
        If DataGridView1.RowCount = 0 Then
            Throw New Exception("Enter Item data item first")
        End If
        Dim obj = New ItemTransfers With {
                  .Modified = DateTime.Now
                  }
        itrservice.UpdateItemTransfers(obj)
        'For i = 0 To _myTable.Rows.Count - 1
        '    Dim detail = New ItemTransfersDetail With {
        '    '     .No = Convert.ToInt32(_myTable.Rows(i)(0)),
        '    '            .CodeProduct = _myTable.Rows(i)(1).ToString(),
        '    '            .Barcode = _myTable.Rows(i)(2).ToString(),
        '    '            .Colorcode = _myTable.Rows(i)(3).ToString(),
        '    '            .Size = _myTable.Rows(i)(4).ToString(),
        '    '            .Qty = Convert.ToInt32(_myTable.Rows(i)(5).ToString())
        '    '            }
        '    'itrservice.UpdateItemTransfersdetail(detail)
        'Next i


    End Sub
End Class
   Public Sub UpdateItemTransfers(ByVal Obj As ItemTransfers)
        Dim sql = $"UPDATE `Stocksout` Set `Modified`='{Obj.Modified}' WHERE `Invno`='{Obj.Invno}';"
        Using _conn = New OleDbConnection(GetOledbConnectionString())
            _conn.Execute(sql)
        End Using
    End Sub
    Public Sub UpdateItemTransfersdetail(ByVal Obj As ItemTransfersDetail)
        Dim sql = $"UPDATE `Stocksoutdetail` Set `CodeProduct`='{Obj.CodeProduct}',`Barcode`='{Obj.Barcode}',`Colorcode`='{Obj.Colorcode}',`Size`='{Obj.Size}',`Qty`={Obj.Qty} WHERE `Invno`='{Obj.Invno}' and `No`={Obj.No};"
        Using _conn = New OleDbConnection(GetOledbConnectionString())
            _conn.Execute(sql)
        End Using
    End Sub

窗体视图 (Form2)

formview(form2)

vb.net ms-access datatable datagridview dapper

评论

1赞 Hursey 8/24/2023
您如何通过清晰简洁的解释来更新您的问题,说明上述解决方案无法按预期工作的原因。在许多不同的问题中,您已经被问过很多次了,更不用说这些问题和提供的建议都已经包含了您要求的信息。
0赞 roy 8/24/2023
@Hursey,感谢您的回复,但我有解决方案
0赞 roy 8/26/2023
@dr.null ,我做出的答案是否不符合方法,即使我可以得到我所做答案的结果,如果没有请您指导,是否有必要循环 DataGridView,或者有没有办法通过 dapper 或其他方式做到这一点?

答:

0赞 roy 8/24/2023 #1

这个链接为我的问题提供了一个解决方案,一个链接

Private Sub BtnUpdate_Click(sender As Object, e As EventArgs) Handles BtnUpdate.Click
        If DataGridView1.RowCount = 0 Then
            Throw New Exception("Enter Item data item first")
        End If
        Dim obj = New ItemTransfers With {
                  .Modified = DateTime.Now,
                  .Invno = TextBox1.Text
                  }
        itrservice.UpdateItemTransfers(obj)
  For Each item As DataGridViewRow In DataGridView1.Rows
Dim detail = New ItemTransfersDetail With {
                        .CodeProduct = CStr(item.Cells(2).Value),
                        .Barcode = CStr(item.Cells(3).Value),
                        .Colorcode = CStr(item.Cells(4).Value),
                        .Size = CStr(item.Cells(5).Value),
                        .Qty = Convert.ToInt32(item.Cells(6).Value),
                        .Invno = TextBox1.Text,
                         .No = Convert.ToInt32(item.Cells(0).Value)
            }
 itrservice.UpdateItemTransfersdetail(detail)
 Next item
        MessageBox.Show("Record Updated Successfully")
  End Sub