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:
The SQL Command is then sent to this procedure to actually interface with the database:
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?
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 IfCode:
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 FunctionAny ideas on how I can speed this up?