2016-03-07 2 views
0

в моей платежной форме, у меня есть кнопка для вставки данных 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 

Но когда я нажимаю на кнопку, чтобы выполнить код выше, это занимает в то время как как я могу сделать это быстрее?

+0

Этот вопрос выглядит как принадлежащий SE Просмотр Кода. –

+0

сначала: измените свой код на использование sqlParameters. Тогда у вас не будет проблем со строкой, содержащей 'и/или, (и избегайте SQL-инъекции). Во-вторых: Пожалуйста, определите «это займет время». Сколько времени за сколько записей? И не открывайте соединение для каждой записи. Это стоит много времени. – nabuchodonossor

+0

Это может быть по теме для обзора кода, если ** ** ** код работает ** и B ** это не гипотетично или неполно. Если вы решите опубликовать сообщение, прочитайте справочный центр перед публикацией. – Quill

ответ

0

Вы можете использовать Multi Thread для ускорения кода. Task Class

Это также версия для vb. Попытайтесь использовать фоновый поток для ручки высоты.

5

В самой первой вещью, двигаются соединение из цикла:

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

большое спасибо –