Quantcast
Channel: VBForums - Visual Basic .NET
Viewing all articles
Browse latest Browse all 27348

[RESOLVED] VS 2012 - Add Records to SQL Faster

$
0
0
I have a routine that reads in data from a text file, sorts it, and then uploads anything new to the database. Here is my Insert code:

Code:

' SQL COMMAND TO ADD ITEM
        Dim sqlCmd2 As New SqlCommand
        sqlCmd2.CommandText = "INSERT INTO Tickets_tbl VALUES(NEWID(), @num, " _
                            & "(SELECT Loc_id FROM Locations_tbl WHERE AccountNum_nvc = @acct AND Cust_id = " _
                            & "(SELECT Cust_id FROM Customers_tbl WHERE CuNumber_nvc = @cnum)), " _
                            & "@line, @bag, @man, @route, @date, " _
                            & "(SELECT Item_id FROM Inventory_tbl WHERE ItemNum_nvc = @item), " _
                            & "@qty, @gen, 0, @cu1, @cu2, @cu3, @cu4, @cu5, @cu6, @cu7, @cu8, @cu9)"
        sqlCmd2.Parameters.Add("@num", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@acct", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@cnum", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@line", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@bag", SqlDbType.SmallInt)
        sqlCmd2.Parameters.Add("@man", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@route", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@date", SqlDbType.Date)
        sqlCmd2.Parameters.Add("@item", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@qty", SqlDbType.Int)
        sqlCmd2.Parameters.Add("@gen", SqlDbType.Bit)
        sqlCmd2.Parameters.Add("@cu1", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@cu2", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@cu3", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@cu4", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@cu5", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@cu6", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@cu7", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@cu8", SqlDbType.NVarChar)
        sqlCmd2.Parameters.Add("@cu9", SqlDbType.NVarChar)


If aTicksDT.Rows.Count > 0 Then
                For Each ar As DataRow In aTicksDT.Rows()
                    ' ADD TICKET
                    sqlCmd2.Parameters("@num").Value = Trim(ar.Item("TicketNumber").ToString())
                    sqlCmd2.Parameters("@acct").Value = Trim(ar.Item("AccountNumber").ToString())
                    sqlCmd2.Parameters("@cnum").Value = Trim(ar.Item("CustomerNumber").ToString())
                    sqlCmd2.Parameters("@line").Value = Trim(ar.Item("LineNumber").ToString())
                    If Not Integer.TryParse(ar.Item("BagNumber").ToString(), sqlCmd2.Parameters("@bag").Value) Then
                        sqlCmd2.Parameters("@bag").Value = 0
                    End If
                    sqlCmd2.Parameters("@man").Value = Trim(ar.Item("ManualID").ToString())
                    sqlCmd2.Parameters("@route").Value = Trim(ar.Item("Route").ToString())
                    If Not Date.TryParse(ar.Item("DeliveryDate").ToString(), sqlCmd2.Parameters("@date").Value) Then
                        sqlCmd2.Parameters("@date").Value = Date.Today()
                    End If
                    sqlCmd2.Parameters("@item").Value = Trim(ar.Item("ItemNumber").ToString())
                    If Not Integer.TryParse(ar.Item("Qty").ToString(), sqlCmd2.Parameters("@qty").Value) Then
                        sqlCmd2.Parameters("@qty").Value = 0
                    End If
                    sqlCmd2.Parameters("@gen").Value = ar.Item("Generic")
                    sqlCmd2.Parameters("@cu1").Value = Trim(ar.Item("CustomDecimal1").ToString())
                    sqlCmd2.Parameters("@cu2").Value = Trim(ar.Item("CustomDecimal2").ToString())
                    sqlCmd2.Parameters("@cu3").Value = Trim(ar.Item("CustomDecimal3").ToString())
                    sqlCmd2.Parameters("@cu4").Value = Trim(ar.Item("CustomInteger1").ToString())
                    sqlCmd2.Parameters("@cu5").Value = Trim(ar.Item("CustomInteger2").ToString())
                    sqlCmd2.Parameters("@cu6").Value = Trim(ar.Item("CustomInteger3").ToString())
                    sqlCmd2.Parameters("@cu7").Value = Trim(ar.Item("CustomText1").ToString())
                    sqlCmd2.Parameters("@cu8").Value = Trim(ar.Item("CustomText2").ToString())
                    sqlCmd2.Parameters("@cu9").Value = Trim(ar.Item("CustomText3").ToString())

                    SetData.NonQuery(sqlCmd2)
                Next
            End If

The SQL Command is then sent to this procedure to actually interface with the database:

Code:

Public Function NonQuery(ByVal sqlCmd As SqlCommand) As Boolean

        Dim sqlConn As SqlConnection = New SqlConnection(GlobalProps.HostConString.ToString())
        sqlCmd.Connection = sqlConn

        Try

            ' OPEN THE CONNECTION
            sqlConn.Open()

            ' EXECUTE THE COMMAND
            sqlCmd.ExecuteNonQuery()

            ' CLOSE THE CONNECTION
            sqlConn.Close()

        Catch ex As Exception
            Debug.WriteLine(ex.Message.ToString(), "SetData.NonQuery Error")
            Return False
        Finally
            If (sqlConn.State = ConnectionState.Open) Then
                sqlConn.Close()
            End If
            sqlCmd.Dispose()
            sqlConn.Dispose()
        End Try

        Return True

    End Function

With a text file that reads in 15000 lines, this whole procedure takes 8-10 minutes. Seems like adding 15000 items to SQL shouldn't take that long.

Any ideas on how I can speed this up?

Viewing all articles
Browse latest Browse all 27348

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>