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: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
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.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
Any ideas on how I can speed this up?




Reply With Quote