我需要导入的数据是由程序解释一种特殊的文件而来的,无法使用SQL SERVER的BCP方式来完成,因此希望请教一下各个大侠ADO有没其他高效的批量导入方法啊?请各位指点,如果有示例代码那就更好了,谢谢~
7 个解决方案
#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.Close
End Sub
#3
楼上这个也是等于先用FOR循环,再用UPDATEBATCH的方法,有没其他可以优化的,不用UPDATEBATCH的
#4
呵呵,UPDATEBATCH这个方法我也没有用过,不过应该比一个一个update要快的,在2L给的链接也可以试试。
#5
如果没有特别好的办法就这样吧:
保证快:)
----------------------------------------------
把多条数据组成一个字符串,一次插入,
需要注意的是:小心字符串长度超标,比如CString最大可以容纳多少字符,小心别超了!
希望你明白,
保证快:)
----------------------------------------------
把多条数据组成一个字符串,一次插入,
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平台了
而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中导入几万个数据
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中导入几万个数据
#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.Close
End Sub
#2
#3
楼上这个也是等于先用FOR循环,再用UPDATEBATCH的方法,有没其他可以优化的,不用UPDATEBATCH的
#4
呵呵,UPDATEBATCH这个方法我也没有用过,不过应该比一个一个update要快的,在2L给的链接也可以试试。
#5
如果没有特别好的办法就这样吧:
保证快:)
----------------------------------------------
把多条数据组成一个字符串,一次插入,
需要注意的是:小心字符串长度超标,比如CString最大可以容纳多少字符,小心别超了!
希望你明白,
保证快:)
----------------------------------------------
把多条数据组成一个字符串,一次插入,
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平台了
而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中导入几万个数据
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中导入几万个数据