【问题标题】:how can i execute this code faster?我怎样才能更快地执行此代码?
【发布时间】:2016-03-07 09:16:40
【问题描述】:

在我的计费表单中,我有一个按钮可以将 datagridview 数据插入两个访问数据库。 我使用此代码插入到第一个数据库:

    Private Sub inserttotblbill()
    Dim billcon As OleDbConnection = New OleDbConnection(constr)
    Dim billcmd As New OleDbCommand

    For i = 0 To dgv.Rows.Count - 1
        billcon.Open()
        billcmd.Connection = billcon
        billcmd.CommandText = ("insert into tblbill(inum,snum,idate,cname,iname,iprc,iqnt,ipaid,itotal,iuser,itype) " _
                & " values('" _
                & TextBox1.Text _
                & "','" _
                & TextBox6.Text _
                & "','" _
                & TextBox2.Text _
                & "','" _
                & TextBox3.Text _
                & "','" _
                & dgv.Rows(i).Cells(0).Value _
                & "','" _
                & dgv.Rows(i).Cells(1).Value _
                & "','" _
                & dgv.Rows(i).Cells(2).Value _
                & "','" _
                & TextBox4.Text _
                & "','" _
                & dgv.Rows(i).Cells(3).Value _
                & "','" _
                & username _
                & "','" _
                & Label2.Text _
                & "')")
        If Not ListBox1.Items.Contains(dgv.Rows(i).Cells(4).Value) Then
            ListBox1.Items.Add(dgv.Rows(i).Cells(4).Value)
        End If
        billcmd.ExecuteNonQuery()
        billcon.Close()
    Next i
  end sub

我使用此代码插入第二个数据库:

    Private Sub inserttoreport()
    Dim rptcon As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\report.mdb; Jet OLEDB:Database Password=KNOZ1003")
    Dim rptcmd As New OleDbCommand

    For k = 0 To dgv.Rows.Count - 1
        rptcon.Open()
        rptcmd.Connection = rptcon
        If dgv.Rows(k).Cells(4).Value = "101" Then
            rptcmd.CommandText = ("insert into tab1(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13) " _
            & " values('" _
            & TextBox1.Text _
            & "','" _
            & TextBox6.Text _
            & "','" _
            & TextBox2.Text _
            & "','" _
            & TextBox3.Text _
            & "','" _
            & dgv.Rows(k).Cells(0).Value _
            & "','" _
            & dgv.Rows(k).Cells(1).Value _
            & "','" _
            & dgv.Rows(k).Cells(2).Value _
            & "','" _
            & TextBox4.Text _
            & "','" _
            & dgv.Rows(k).Cells(3).Value _
            & "','" _
            & TextBox5.Text _
            & "','" _
            & Label2.Text _
            & "','" _
            & username _
            & "','" _
            & xxxx _
            & "')")

        ElseIf dgv.Rows(k).Cells(4).Value = "102" Then
            rptcmd.CommandText = ("insert into tab2(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13) " _
            & " values('" _
            & TextBox1.Text _
            & "','" _
            & TextBox6.Text _
            & "','" _
            & TextBox2.Text _
            & "','" _
            & TextBox3.Text _
            & "','" _
            & dgv.Rows(k).Cells(0).Value _
            & "','" _
            & dgv.Rows(k).Cells(1).Value _
            & "','" _
            & dgv.Rows(k).Cells(2).Value _
            & "','" _
            & TextBox4.Text _
            & "','" _
            & dgv.Rows(k).Cells(3).Value _
            & "','" _
            & TextBox5.Text _
            & "','" _
            & Label2.Text _
            & "','" _
            & username _
            & "','" _
            & xxxx _
            & "')")
        End If
        rptcmd.ExecuteNonQuery()
        rptcon.Close()
    Next k
  End Sub

但是当我按下按钮执行上述代码时,需要一段时间 我怎样才能让它更快?

【问题讨论】:

  • 这个问题看起来属于 CodeReview SE。
  • 首先:更改您的代码以使用 sqlParameters。那么您将不会遇到包含 ' 和/或 , 的字符串的问题(并避免 SQL 注入)。第二:请定义“需要一段时间”。多少记录多长时间?并且,不要为每条记录打开连接。这会花费很多时间。
  • 这可能是代码审查的主题,如果 A 代码有效, 和 B 无论如何都不是假设或不完整的。如果您决定发帖,请在发帖前阅读帮助中心。
  • 使用绑定的 datagridview - 更新数据表而不是使用 SQL 进行更新/插入。

标签: vb.net ms-access oledb ado


【解决方案1】:

首先,将连接移出循环:

billcon.Open()
billcmd.Connection = billcon
For i = 0 To dgv.Rows.Count - 1
    ' ...
Next
billcon.Close()

【讨论】:

    【解决方案2】:

    您可以使用多线程来加速代码。 Task Class

    这也是 vb 的版本。尝试使用后台线程处理身高体重。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-06
      • 2017-03-13
      • 2019-12-16
      • 2019-09-19
      • 1970-01-01
      • 2014-07-23
      • 2021-01-31
      • 1970-01-01
      相关资源
      最近更新 更多