使用SqlBulkCopy 直接导入到SQL?

szctrl 2011-05-04 11:29:54

请问有没有更快的方法把文本文件格式的内容导入到SQL里表里,我先是用数据流把文本文件写入datatable,方法是用数组一条一条写入,再使用SqlBulkCopy类导入到SQL里表里,但是还是很慢。
文本的内容大小有(127756KB)
...全文
786 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zixingcheng_ 2011-05-11
  • 打赏
  • 举报
回复
BulkCopy,或 BulkInsert 不是sql在直接操作数据的吗?说读入数据的速度慢,不知道是如何测定的,Bulk方法是我已知最快的方法了,当然文件过于庞大后慢是肯定的,减小文件大小呗。
szctrl 2011-05-09
  • 打赏
  • 举报
回复
关键是在读取文本的时候很慢
szctrl 2011-05-06
  • 打赏
  • 举报
回复
用SqlBulkCopy在读取数据到数组里就慢了
ycproc 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 szctrl 的回复:]

-百多万条数据用EXCEL能打开吗
[/Quote]

一包多万条的数据能用记事本存储么?

OnlineLearner 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ringobob 的回复:]

引用 7 楼 interhker 的回复:

SqlBulkCopy 是直接把datatable 导入到数据库
我测试过10万条记录,大约3秒,请测试这个

自己修改自己的链接
还有开一个叫Item的table在数据库
VB.NET code

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As……
[/Quote]

这样没办法了,我很少使用IO
ringobob 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 interhker 的回复:]

SqlBulkCopy 是直接把datatable 导入到数据库
我测试过10万条记录,大约3秒,请测试这个

自己修改自己的链接
还有开一个叫Item的table在数据库
VB.NET code

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Hand……
[/Quote]
LZ的瓶颈是在文件的I/O上,不是在DB上。
OnlineLearner 2011-05-05
  • 打赏
  • 举报
回复
SqlBulkCopy 是直接把datatable 导入到数据库
我测试过10万条记录,大约3秒,请测试这个

自己修改自己的链接
还有开一个叫Item的table在数据库

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Create a table, add columns and name
' them the same as they are in the
' database table they are updating
Dim table As New DataTable()
table.Columns.Add("ItemCode")
table.Columns.Add("ItemDesc")


'Load the table with 100,000 rows!
For i As Integer = 1 To 100000
table.Rows.Add(i, "Item " & i) : Next


'Create a new StopWatch to measure the
' amount of time it takes to perform the
' insert
Dim swatch As New Stopwatch()
swatch.Start()


'Configure the connection string
Dim cnString As String = _
"Data Source=localhost;" & _
"Initial Catalog=Catalog;" & _
"Integrated Security=True;"

'Create a new SqlBulkCopy class
Dim bcp As New SqlClient.SqlBulkCopy(cnString, _
SqlClient.SqlBulkCopyOptions.KeepNulls)

'You MUST specifiy the table you are going to fill
bcp.DestinationTableName = "Items"

'Increase the timeout to a more appropriate time
' for the amount of data your are inserting.
' The default is 30 seconds
bcp.BulkCopyTimeout = 60

'Write the data to the SQL Server Database table
bcp.WriteToServer(table)

'Close the instance
bcp.Close()

'Stop the Stopwatch!
swatch.Stop()

MsgBox("Done! Elapsed Milliseconds: " & _
swatch.ElapsedMilliseconds)
End Sub
ringobob 2011-05-05
  • 打赏
  • 举报
回复
调用ssis包的方法
我从网上摘的

使用存储过程传递参数
通过DTEXEC命令行适用工具来执行SSIS包即可. 参考:
create proc ssisexec_up @param1 nvarchar(100) as begin
DECLARE @sqlcmd nvarchar(2000)
DECLARE @returncode int

SET @sqlcmd ='dtexec /f "C:\UpsertData.dtsx" /SET \package.variables[myvariable].Value;'+ltrim(@param1)+ ' '

EXEC @returncode = xp_cmdshell @sqlcmd end
朕赐你肥皂 2011-05-05
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20110420/09/58732936-7b48-4de1-ad44-496a3766172a.html
朕赐你肥皂 2011-05-05
  • 打赏
  • 举报
回复
擦,直接见我的帖子,我也问过相同问题
ringobob 2011-05-05
  • 打赏
  • 举报
回复
有2种实现方法:
1.如果是在sqlserver中直接操作,则点击DB,右键task里面import data,数据源选择txt,provider选择file system。

2.如果想在程序中调用,则可以用sqlserver的sqlserver的bussiness 那个程序写一个ssis package,里面也有导入导出data的向导。一步步设置,然后保存好,程序再调用这个ssis包
szctrl 2011-05-05
  • 打赏
  • 举报
回复
-百多万条数据用EXCEL能打开吗
独立级IT民工 2011-05-05
  • 打赏
  • 举报
回复
貌似没什么好的办法,数据量大插入肯定会时间长啊,用SqlBulkCopy 函数这个应该是最好的最直接的方法。
Tosp2012 2011-05-05
  • 打赏
  • 举报
回复
打開txt文件時,用Excel方式打開,另存為Excel文件。
用SQL導入Excel文件即可。
ringobob 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 szctrl 的回复:]

我之前就用的是SqlBulkCopy 是直接把datatable 导入到数据库,现在数据大了已经不能满足需求了.如果调用DTS包也不方便
[/Quote]
为什么调用不方便?
szctrl 2011-05-05
  • 打赏
  • 举报
回复
我之前就用的是SqlBulkCopy 是直接把datatable 导入到数据库,现在数据大了已经不能满足需求了.如果调用DTS包也不方便

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧