Как мне быстро и сразу вставить миллионы записей в таблицу sql, используя vb. net? - PullRequest
1 голос
/ 18 июня 2020

Я заполняю gridview данными и вставляю запись 1 на 1 в таблицу sql, используя хранимую процедуру, которая имеет только оператор вставки.

Это нормально, но когда количество записей исчисляется миллионами, это занимает значительное время. Я хочу вставить скорость в таблицу и это не займет много времени.

Try
        con.ConnectionString = v_ObjConn

        Dim ParamName(8), ParamType(8), ParamValue(8) As String

        ParamName(0) = "@WOCODE" : ParamType(0) = SqlDbType.VarChar
        ParamName(1) = "@WODESC" : ParamType(1) = SqlDbType.VarChar
        ParamName(2) = "@WOTYPE" : ParamType(2) = SqlDbType.VarChar
        ParamName(3) = "@TAGNUMBER" : ParamType(3) = SqlDbType.VarChar

        ParamName(4) = "@PMCODE" : ParamType(4) = SqlDbType.VarChar
        ParamName(5) = "@STATUS" : ParamType(5) = SqlDbType.VarChar
        ParamName(6) = "@COMPLETEDDATE" : ParamType(6) = SqlDbType.Date
        ParamName(7) = "@LASTUPDATE" : ParamType(7) = SqlDbType.Date

        lblWaitingMsg.Text = "Importing records into the VAIL-Plant. Please wait..."

        For Each row As GridViewRow In gv_InforWO.Rows

            Dim chkBoxSelect As CheckBox = CType(row.FindControl("chkSelect"), CheckBox)

            If chkBoxSelect.Checked = True Then

                ParamValue(0) = row.Cells(1).Text.ToString().Replace("&", "and").Replace(" ", String.Empty)
                ParamValue(1) = row.Cells(2).Text.ToString().Replace("&", "and").Replace(" ", String.Empty)
                ParamValue(2) = row.Cells(3).Text.ToString().Replace("&", "and").Replace(" ", String.Empty)
                ParamValue(3) = row.Cells(4).Text.ToString().Replace("&", "and").Replace(" ", String.Empty)

                ParamValue(4) = row.Cells(5).Text.ToString().Replace("&", "and").Replace(" ", String.Empty)
                ParamValue(5) = row.Cells(6).Text.ToString().Replace("&", "and").Replace(" ", String.Empty)
                ParamValue(6) = Convert.ToDateTime(row.Cells(7).Text)
                ParamValue(7) = Convert.ToDateTime(row.Cells(8).Text)

                Func.SP_ExecDML(con, "[dbo].[SP_InsertWorkOrders_InforEAM]", ParamName, ParamType, ParamValue)

            End If

        Next

        MsgBox("Records have been imported/updated.")

        BindGridInfoWO()

    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        lblWaitingMsg.Text = ""
    End Try
...