Excel中每行的SQL db查找

时间:2013-10-01 20:38:25

标签: asp.net sql vb.net excel

我创建了一个网页,员工可以上传Excel xlsx文档进行处理,如果符合要求,则会返回相同的文档,并填写某些关键单元格。它有效,但我对它运行的速度不满意。需要几分钟才能完成2500行。

它像这样运行: 用户上传文档 - > 服务器端打开excel文档并逐行进行 - > 如果当前行的第31列!= 10,则连接到SQL并根据第5列执行查询。 - > 来自查询的结果进入该行第35列。 - > 下一行。冲洗并重复。 - > 完成后,将文件返回给用户。

虽然这有效,但它也很慢。有没有人对更好的方法有任何想法?

 For n = 2 To excelWorkSheet.Rows.Count

            Dim thing As String = excelWorkSheet.Cells(n, 5).Value
            'only until empty row 
            If excelWorkSheet.Cells(n, 5).Value = "" Then
                Exit For
            End If


            If excelWorkSheet.Cells(n, 31).Value <> "10" Then
                strSQL = "EXEC sp_Lookup_Type " & thing
                cmd.CommandText = strSQL
                cmd.Connection = cn
                rdrSQL = cmd.ExecuteReader()


                While rdrSQL.Read()
                    If Not IsDBNull(rdrSQL("TYPE")) Then
                        excelWorkSheet.Cells(n, 35).Value = rdrSQL("TYPE")
                    Else
                        excelWorkSheet.Cells(n, 35).Value = "NO DATA"
                    End If
                End While

                cmd.Dispose()
                rdrSQL.Close()
            End If
        Next

        cn.Close()

1 个答案:

答案 0 :(得分:1)

我的目标是减少SQL调用的次数。

选项#1:如果查询表中的项目数量足够小......

  • 在循环开始时下载所有查找表
  • 在循环中,检查数据库表的本地副本,而不是每次都转到数据库。

选项#2:如果您无法预先缓存所有项目......

  • 在电子表格中循环一次,并收集要查找的项目列表。
  • 对数据库进行一次调用,一次发送所有项目。
  • 数据库返回所需的一小部分值。
  • 使用小列表作为数据库缓存,并按照“选项#1”
  • 中的步骤操作