Dans mon formulaire de facturation, j'ai un bouton pour insérer les données de datagridview dans deux bases de données d'accès. i utilisé ce code pour insérer la première base de données:comment puis-je exécuter ce code plus rapidement?
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
i utilisé ce code à insérer à la seconde base de données:
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
Mais quand je presse le bouton pour exécuter le code ci-dessus, il faut tandis que comment puis-je le rendre plus rapide?
Cette question ressemble appartenant à CodeReview SE. –
first: Modifiez votre code pour utiliser sqlParameters. Alors vous n'aurez aucun problème avec la chaîne contenant 'et/ou, (et évitez l'injection SQL). Deuxièmement: Veuillez définir "cela prend du temps". Combien de temps pour combien d'enregistrements? Et, ne pas ouvrir la connexion pour chaque enregistrement. Cela coûte beaucoup de temps. – nabuchodonossor
Cela peut être sur le sujet pour l'examen du code, si ** A ** le code fonctionne, ** et B ** il n'est pas hypothétique ou incomplète en aucune façon. Si vous décidez de poster, veuillez lire le centre d'aide avant de poster. – Quill