简体   繁体   English

在MySQL语句中使用For循环在vb.net中变慢

[英]Using For loop in mysql statement getting slow in vb.net

This is my code for insert and update statement: 这是我的插入和更新语句的代码:

For i = 0 To lvFabric1.Items.Count - 1

            strQ4 = ""
            strQ4 = strQ4 & "INSERT into js_det(LINE_NO, FABRIC1, FABRIC2, `DESC`) SELECT LPAD('" & i + 1 & "',2, '0'), '" & lvFabric1.Items(i).Text & "','sdf', `DESC` from rm_inv where ITEM_CODE = '" & lvFabric1.Items(i).Text & "'"

            strQ5 = ""
            strQ5 = strQ5 & "UPDATE js_det set TRAN_NO = (SELECT JS_TRAN FROM counter) where Fabric1 = '" & lvFabric1.Items(i).Text & "'"

            cmd.CommandText = strQ4
            cmd.ExecuteNonQuery()

            cmd.CommandText = strQ5
            cmd.ExecuteNonQuery()

        Next

What the problem here is that its getting slower if it is looping 5 times and above, it take above 3 second. 这里的问题是,如果循环5次以上,它会变慢,需要3秒以上。 How can I speed up this code? 如何加快此代码的速度? or is there another way? 还是有另一种方法?

Thanks for the help. 谢谢您的帮助。

To speed it up, commit the whole thing in one go, somthing like: 为了加快速度,一口气将整个事情付诸实践,例如:

Dim sqls As New List(Of String)
For i = 0 To lvFabric1.Items.Count - 1
    sqls.Add("INSERT into js_det(LINE_NO, FABRIC1, FABRIC2, `DESC`) SELECT LPAD('" & i + 1 & "',2, '0'), '" & lvFabric1.Items(i).Text & "','sdf', `DESC` from rm_inv where ITEM_CODE = '" & lvFabric1.Items(i).Text & "'")

    sqls.Add("UPDATE js_det set TRAN_NO = (SELECT JS_TRAN FROM counter) where Fabric1 = '" & lvFabric1.Items(i).Text & "'")
Next
If sqls.Any() Then
    cmd.CommandText = sqls.Aggregate(Function(m, n) m & ";" & n)
    cmd.ExecuteNonQuery()
End If

However, it's not a recommended way to do sql query in .net. 但是,这不是在.net中执行sql查询的推荐方法。

SQL parameter should be used to avoid any sql injection or sql syntax error. 应该使用SQL参数来避免任何sql注入或sql语法错误。

EDIT: using sql parameter - 编辑:使用sql参数-

    Using con As New SqlConnection("My connection string..."),
        cmd As New SqlCommand(sql, con)
        cmd.CommandText = "UPDATE js_det set TRAN_NO = (SELECT JS_TRAN FROM counter) where Fabric1 = @fabric"
        Dim fabricParam = cmd.Parameters.Add("@fabric", SqlDbType.VarChar)

        con.Open()
        For i = 0 To lvFabric1.Items.Count - 1
            fabricParam.Value = lvFabric1.Items(i).Text
            cmd.ExecuteNonQuery()
        Next
        con.Close()

    End Using

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM