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

标签 mysql vb.net performance loops

这是我的插入和更新语句的代码:

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

这里的问题是,如果循环 5 次及以上,它会变慢,需要 3 秒以上。我怎样才能加快这段代码?还是有别的办法?

感谢您的帮助。

最佳答案

为了加快速度,一次提交整个事情,比如:

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

但是,这不是在 .net 中进行 sql 查询的推荐方法。

应该使用 SQL 参数来避免任何 sql 注入(inject)或 sql 语法错误。

编辑:使用 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

关于mysql - 在 mysql 语句中使用 For 循环在 vb.net 中变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18482790/

相关文章:

mysql - 在不丢失其他元数据的情况下更改 MySQL 中的列数据类型(DEFAULT、NOTNULL...)

c# - 使用 MySQLDataAdapter 输入字符串的格式不正确

c# - 跟踪在从 VB6 EXE 加载的 .NET DLL 中不起作用

java - 如何为 S3 对象创建 java OutputStream 并向其写入值?

javascript - 为什么这些 Javascript for 循环在 Firefox 上比在 Chrome/Safari 上慢得多?

mysql - Mysql $stmt->execute(数组($变量));没有按预期工作

mysql - Perl DBD 错误 FUNCTION dbName.GLOB 不存在

vb.net - 自定义属性未显示在属性窗口中

mysql - 2个表同时插入数据的方法

arrays - 有效二维数组的delta数据结构