目前我利用ADO的RECORDSET对象的ADDNEW()以及UPDATEBATCH()方法进行数据导入,但发现一条一条记录导入效率很低,对于每五分钟需要导入上十万条记录几乎是不可能实现。
我需要导入的数据是由程序解释一种特殊的文件而来的,无法使用SQL SERVER的BCP方式来完成,因此希望请教一下各个大侠ADO有没其他高效的批量导入方法啊?请各位指点,如果有示例代码那就更好了,谢谢~
我需要导入的数据是由程序解释一种特殊的文件而来的,无法使用SQL SERVER的BCP方式来完成,因此希望请教一下各个大侠ADO有没其他高效的批量导入方法啊?请各位指点,如果有示例代码那就更好了,谢谢~
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
保证快:)
----------------------------------------------
把多条数据组成一个字符串,一次插入,insert into tb(stu_no,stu_name)
select '001','zhangsan'
union all select '002','lisi'
union all select '003','wangwu'
union all ..........
需要注意的是:小心字符串长度超标,比如CString最大可以容纳多少字符,小心别超了!希望你明白,
而ADO没有这个方法,所以没办法以前就用存储过程稍微优化了下
ADO这块感觉ms的意思以后都只管.NET平台了
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中导入几万个数据