您的位置:程序门 -> vb -> 数据库(包含打印,安装,报表)



如何用ado控件将vb中的大量数据快速写入sql server数据库?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何用ado控件将vb中的大量数据快速写入sql server数据库?
发表于:2008-01-17 15:05:15 楼主
程序如下:将arrdata()中的数据写入表tablename   中。
private   function   todbs(tablename   as   string,   valuefield   as   string,   arrdata()   as   integer)
        dim   i   as   integer
        dim   lenarr   as   long
        dim   cnt   as   adodb.connection
        dim   strsql   as   string
        dim   tempstr   as   string

        lenarr   =   ubound(arrdata)

        set   cnt   =   new   adodb.connection         '将对象引用赋给变量或属性
        cnt.open   strcn

        '保存数据   to   数据表
          for   i   =   0   to   lenarr
                strsql   =   "insert   into   "   &   tablename   &   "   (test_sn,"   &   valuefield   &   ")   values   ('"   &   _
                                  testno   &   "',"   &   arrdata(i)   &   ")"
                cnt.EXECute   strsql     '此语句耗时2ms!!!
        next

        set   cnt   =   nothing

end   function

效率实在太低!望各位大侠不吝赐教!!
发表于:2008-01-17 15:41:201楼 得分:0

'//将sql语句用分号分隔.一次提次   50   条.  


private       function       todbs(tablename       as       string,       valuefield       as       string,       arrdata()       as       integer)  
                dim       i       as       integer  
                dim       lenarr       as       long  
                dim       cnt       as       adodb.connection  
                dim       strsql       as       string  
                dim       tempstr       as       string  
 
                lenarr       =       ubound(arrdata)  

                set       cnt       =       new       adodb.connection                   '将对象引用赋给变量或属性  
                cnt.open       strcn  

                '保存数据       to       数据表  
                    for       i       =       0       to       lenarr  
if   i   mod   50   =0   then  
                                strsql       =     strsql       &     "insert       into       "       &       tablename       &       "       (test_sn,"       &       valuefield       &       ")       values       ('"       &       _  
                                                                    testno       &       "',"       &       arrdata(i)       &       ");"  
                                cnt.EXECute       strsql           '此语句耗时2ms!!!  
        strsql=""
end   if
                                strsql       =     strsql       &     "insert       into       "       &       tablename       &       "       (test_sn,"       &       valuefield       &       ")       values       ('"       &       _  
                                                                    testno       &       "',"       &       arrdata(i)       &       ");"  
                                cnt.EXECute       strsql           '此语句耗时2ms!!!  

                next  

                set       cnt       =       nothing  

end       function  
发表于:2008-01-17 16:15:372楼 得分:0
thank   you!   mr.   chen!速度提高了三倍,不过还是太慢,现在存1m的数据大概需要5~7分钟!我采集到的数据通常大于10m,难道只能等等等。。。。。。。。。。。。。
发表于:2008-01-18 15:57:013楼 得分:0
再要提高的话,只能写存储过程了.

create   proc   prc_insertinto(
@var_table varchar(128),--表名.
@var_valuefield varchar(256),--字段列表.
@var_val varchar(8000)   --   值用分号分隔的序列值。如:   'a',1;'b',2
)   as   begin
declare   @var_cmd varchar(8000)
set   @var_val=';'   +   @var_val
set   @var_cmd=replace(@var_val,';',');insert   into   '   +   @var_table   +   '   ('   +   @var_valuefield   +   ')   values('  
set   @var_cmd=left(@var_cmd,len(@var_cmd)-1)   +   ')'
EXECute   @var_cmd
end

直接调用.前台以   100,或   200   或更多按值格式调用(要以调试出一个值,最优值上调用该过程出错前的值).即可.
跟你原来比,应该可以提高10倍以上.
发表于:2008-01-18 16:03:204楼 得分:0
改一下

create       proc       prc_insertinto(  
@var_table   varchar(128),--表名.  
@var_valuefield   varchar(256),--字段列表.  
@var_val   varchar(8000)       --       值用分号分隔的序列值。如:       'a',1;'b',2  
)       as       begin  
declare       @var_cmd   varchar(8000)  
set       @var_val=   @var_val  
set       @var_cmd=replace(@var_val,';',');insert   into   '       +       @var_table       +       '   ('   +   @var_valuefield       +       ')       values('      
set       @var_cmd='insert       into       '       +       @var_table       +       '   ('       +       @var_valuefield       +       ')       values('   +   @var_cmd       +       ')'  
EXECute       (@var_cmd   )
end  


快速检索

最新资讯
热门点击