Foxtable(狐表)用户栏目专家坐堂 → [求助] sql保存速度如何优化


  共有2043人关注过本帖树形打印复制链接

主题:[求助] sql保存速度如何优化

帅哥哟,离线,有人找我吗?
2900819580
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1310 积分:9512 威望:0 精华:0 注册:2015/6/30 8:46:00
[求助] sql保存速度如何优化  发帖心情 Post By:2020/3/17 16:06:00 [只看该作者]

    老师,以下是保存的代码,逐行判断和保存,行数多的话,很慢,有点假死的感觉,有没有什么方法优化一下。

 

    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


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106536 积分:541839 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/17 16:11:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
2900819580
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1310 积分:9512 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By: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 语句结尾之后找到字符。



 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106536 积分:541839 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/18 11:35:00 [只看该作者]

access数据库?那就只能逐条处理了,加上事务即可

 回到顶部
帅哥哟,离线,有人找我吗?
2900819580
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1310 积分:9512 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2020/3/18 17:31:00 [只看该作者]

老师,Access 事务没有接触过,我应该从那里入手,想实现这样的功能需要学习那些知识?

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106536 积分:541839 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/18 17:32:00 [只看该作者]


 回到顶部