2013-06-28 73 views
1

我用下面的代码来处理插图:但它占用太多的时间,我怎么能提高,或使工作更快:阅读Excel和插入到数据库

<cfspreadsheet action="read" excludeheaderrow="yes" headerrow="1" rows="2-65536" query="mySheet" src="#dest#\#newfile#" sheet="1"> 
     <cftry> 
     <cfquery datasource="#request.dsn#" name="myInsert"> 
     <cfoutput> 
     <cfloop query="mySheet"> 
     INSERT INTO mytable(memberID,lastname,firstname,pid,pname,gender,dob,workphone,homephone,address1,address2,city,county,state,zip,marketValue) 
     values('#mySheet.mem_id##RandRange(1,100)#','#mySheet.MEM_LAST_NAME#','#mySheet.MEM_FIRST_NAME#','#mySheet.PCP_ID#','#mySheet.pcp_name#','#mySheet.gender#','#mySheet.dob#','#mySheet.WORKTELEPHONENUMBER#','#mySheet.HOMETELEPHONENUMBER#','#mySheet.ADDRESSLINE1#','#mySheet.ADDRESSLINE2#','#mySheet.CITY#','#mySheet.COUNTY#','#mySheet.state#','#mySheet.zip#','#mySheet.GROUPNAME#') 
     </cfloop> 
     </cfoutput> 
     </cfquery> 

记录在Excel工作表超过50000

+0

超过50000?我猜他们有65536 ... – duncan

+0

数据插入后,页面请求上发生了什么? –

+0

是的,它显示插入的总记录,并为失败的记录生成日志 –

回答

0

下面就来处理它的一种方法:

  • 把整个事情(cfspreadsheet和所有刀片)为threaded功能,因此它可以在后台运行
  • 将电子表格查询(上载结果)保存到会话变量中
  • 上传完成后,请批量插入查询;在每批中将任何问题添加到反馈阵列中,该反馈阵列也在会话范围内
  • 在用户端,有一个页面告诉用户事情正在“正在...”并重新加载并显示反馈问题(最好用ajax)