这是我的插入和更新语句的代码:
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/