目前我利用ADO的RECORDSET对象的ADDNEW()以及UPDATEBATCH()方法进行数据导入,但发现一条一条记录导入效率很低,对于每五分钟需要导入上十万条记录几乎是不可能实现。
我需要导入的数据是由程序解释一种特殊的文件而来的,无法使用SQL SERVER的BCP方式来完成,因此希望请教一下各个大侠ADO有没其他高效的批量导入方法啊?请各位指点,如果有示例代码那就更好了,谢谢~

解决方案 »

  1.   

    试试UpdateBatch,下面VB代码,参考修改下就好了。
    Public Sub UpdateBatchX()   Dim rstTitles As ADODB.Recordset
       Dim strCnn As String
       Dim strTitle As String
       Dim strMessage As String   ' 将连接字符串赋值给变量。
          strCnn = "Provider=sqloledb;" & _
          "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "   Set rstTitles = New ADODB.Recordset
       rstTitles.CursorType = adOpenKeyset
       rstTitles.LockType = adLockBatchOptimistic
       rstTitles.Open "titles", strCnn, , , adCmdTable
       
       rstTitles.MoveFirst   ' 对记录集执行循环并询问用户是否要更改指定标题的类型。
       Do Until rstTitles.EOF
          If Trim(rstTitles!Type) = "psychology" Then
             strTitle = rstTitles!Title
             strMessage = "Title: " & strTitle & vbCr & _
                "Change type to self help?"         If MsgBox(strMessage, vbYesNo) = vbYes Then
                rstTitles!Type = "self_help"
             End If
          End If      rstTitles.MoveNext
       Loop   ' 询问用户是否要提交以上所作的全部更改。
       If MsgBox("Save all changes?", vbYesNo) = vbYes Then
          rstTitles.UpdateBatch
       Else
          rstTitles.CancelBatch
       End If   ' 打印记录集中的当前数据。
       rstTitles.Requery
       rstTitles.MoveFirst
       Do While Not rstTitles.EOF
          Debug.Print rstTitles!Title & " - " & rstTitles!Type
          rstTitles.MoveNext
       Loop   ' 恢复原始值,因为这只是演示。
       rstTitles.MoveFirst
       Do Until rstTitles.EOF
          If Trim(rstTitles!Type) = "self_help" Then
             rstTitles!Type = "psychology"
          End If
          rstTitles.MoveNext
       Loop
       rstTitles.UpdateBatch   rstTitles.CloseEnd Sub
      

  2.   

    http://topic.csdn.net/u/20110507/22/0646a7af-183d-425b-987d-5922b8e3247c.html
      

  3.   

    楼上这个也是等于先用FOR循环,再用UPDATEBATCH的方法,有没其他可以优化的,不用UPDATEBATCH的
      

  4.   

    呵呵,UPDATEBATCH这个方法我也没有用过,不过应该比一个一个update要快的,在2L给的链接也可以试试。
      

  5.   

    如果没有特别好的办法就这样吧:
    保证快:)
    ----------------------------------------------
    把多条数据组成一个字符串,一次插入,insert into tb(stu_no,stu_name)
    select '001','zhangsan'
    union all select '002','lisi'
    union all select '003','wangwu'
    union all ..........
    需要注意的是:小心字符串长度超标,比如CString最大可以容纳多少字符,小心别超了!希望你明白, 
      

  6.   

    ADO.NET提供一个SqlBulkCopy可以批量插入数据,效率很高
    而ADO没有这个方法,所以没办法以前就用存储过程稍微优化了下
    ADO这块感觉ms的意思以后都只管.NET平台了
      

  7.   

    在查询分析器中
    USE ......//数据库名
    insert into table select..,..,..,..,.. (列名)from ('MICROSOFT.JET.OLEDB4.0','Data Source="c:text.xls(数据所在excel的名字)",USER ID-Admin,Password=;Extended properties=Excel5.0')...[sheet1$(数据所在的sheet)]
    用这个方法可以一次性向SQLServer中导入几万个数据