以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- [求助] sql保存速度如何优化 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=147465)
|
-- 作者:2900819580
-- 发布时间:2020/3/17 16:06:00
-- [求助] sql保存速度如何优化
老师,以下是保存的代码,逐行判断和保存,行数多的话,很慢,有点假死的感觉,有没有什么方法优化一下。
cmd.CommandText = "sele ct * from {明细} where [_Identify] is null" Dim sdt As DataTable = cmd.ExecuteReader For Each dr As DataRow In dt.Se lect("ch > 0") cmd.CommandText = "sel ect Count(*) FROM {明细} where ItID = " & dr("ItID") Dim sz As String Dim lm As String If cmd.ExecuteScalar > 0 Then For Each c As DataCol In sdt.DataCols If c.Name <> "ch" AndAlso tb.Cols.Contains(c.Name) Then If sz > "" Then sz &= "," sz &= c.Name & " = \'" & dr(c.Name) & "\'" End If Next cmd.CommandText = "UPD ATE {明细} SET " & sz & " WHERE ItID = " & dr("ItID") cmd.ExecuteNonQuery() Else For Each c As DataCol In sdt.DataCols If c.Name <> "ch" AndAlso tb.Cols.Contains(c.Name) Then If lm > "" Then lm &= "," lm &= "[" & c.Name & "]" If sz > "" Then sz &= "," sz &= "\'" & dr(c.Name) & "\'" End If Next cmd.CommandText = "Ins ert Into {明细} (" & lm & ") Values ( " & sz & ")" cmd.ExecuteNonQuery End If sz = Nothing lm = Nothing Next
|
-- 作者:有点蓝
-- 发布时间:2020/3/17 16:11:00
--
把sql合并为一条执行。如:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=98689
|
-- 作者:2900819580
-- 发布时间:2020/3/18 11:34:00
--
Dim udstr As String For Each dr As DataRow In dt.Sel ect("ch > 0") cmd.CommandText = "sel ect Count(*) FROM {明细} where ItID = " & dr("ItID") Dim sz As String Dim lm As String If cmd.ExecuteScalar > 0 Then For Each c As DataCol In sdt.DataCols If c.Name <> "ch" AndAlso tb.Cols.Contains(c.Name) Then If sz > "" Then sz &= "," sz &= c.Name & " = \'" & dr(c.Name) & "\'" End If Next If udstr > "" Then udstr &= " ; " udstr &= "UPD ATE {明细} SET " & sz & " WHERE ItID = " & dr("ItID") Else For Each c As DataCol In sdt.DataCols If c.Name <> "ch" AndAlso tb.Cols.Contains(c.Name) Then If lm > "" Then lm &= "," lm &= "[" & c.Name & "]" If sz > "" Then sz &= "," sz &= "\'" & dr(c.Name) & "\'" End If Next If udstr > "" Then udstr &= " ; " udstr &= "Insert Into {明细} (" & lm & ") Values ( " & sz & ")" End If sz = Nothing lm = Nothing Next MessageBox.Show(udstr) If udstr > "" Then cmd.CommandText = udstr cmd.ExecuteNonQuery End If
messaghebox显示出来的结果是
此主题相关图片如下:无标题魂牵梦萦.png

结果显示错误为
.NET Framework 版本:4.0.30319.42000 Foxtable 版本:2020.1.19.19 错误所在事件: 详细错误信息: 在 SQL 语句结尾之后找到字符。
|
-- 作者:有点蓝
-- 发布时间:2020/3/18 11:35:00
--
access数据库?那就只能逐条处理了,加上事务即可
|
-- 作者:2900819580
-- 发布时间:2020/3/18 17:31:00
--
老师,Access 事务没有接触过,我应该从那里入手,想实现这样的功能需要学习那些知识?
|
-- 作者:有点蓝
-- 发布时间:2020/3/18 17:32:00
--
http://www.foxtable.com/webhelp/topics/2933.htm
|