如何解决几十万条记录数据转换的速度问题

arlgil 2003-04-03 09:30:57
如何解决几十万条记录数据转换的速度问题。

从foxpro的dbf到ms sql数据库的数据转换,数据量非常大,有几十万条。目前我的方法是
while not eof {
先从源库读一条,再写入ms sql一条;
}

必须用vb实现,ADO控件。

大概要6-8个小时才能完成,请问如何解决速度问题??采用什么方法??最快大概需要多长时间。

我的email:arlgil@163.com,分不是问题
...全文
77 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
arlgil 2003-04-04
  • 打赏
  • 举报
回复
谢谢大家,我利用周末好好研究一下,再把结果汇报给大家,然后就结分了:)。我的qq:21114341,希望chenyu5188,zhp80(zhp80),cbr7619(cbr7619) 可以加我,谢谢
chenyu5188 2003-04-04
  • 打赏
  • 举报
回复
你在编程之前可以先用SQL Server的数据导入/导出功能将数据先导进去。
然后再编程对数据库的数据进行操作。
zhp80 2003-04-04
  • 打赏
  • 举报
回复
利用数据导入向导\保存、调度、复制包步骤,另存为VB文件后,会生成一VB模块文件.bas,
然后
1.把该文件加入你的工程
2.把该文件的Sub Main()更名为你的过程名
3.找出对DBF文件应用的地方,换成一参数带入
4.在需数据转换的地方调用该过程
即可

另外记住:在你的工程中要引用
C:\Program Files\Microsoft SQL Server\80\Tools\Binn\dtspkg.dll
Microsoft DTSPackage Object Library

OYHL 2003-04-03
  • 打赏
  • 举报
回复
多线成应该可以吧,,,,,,ok,?????多线程
WorkSpace 2003-04-03
  • 打赏
  • 举报
回复
创建SQL Server的连接数据库,写存储过程导数据或直接读连接数据库的数据。
zhp80 2003-04-03
  • 打赏
  • 举报
回复
如果你只需进行一次转换,可以用SQL server 企业管理器的数据导入向导 or 在数据转换服务中完成
入你需在编程中实现,那就得用DTS(数据转换服务),具体内容可以去SQL server 的联机丛书中查阅(关键字DTS),那里有详细讲解和VB事例。
另外,程序中的DTS包,你可以利用数据导入向导\保存、调度、复制包步骤,另存为VB文件,以后在程序中直接使用
arlgil 2003-04-03
  • 打赏
  • 举报
回复
to cbr7619(cbr7619) 是啊,就是慢再这个地方,但是我不知道有没有什么解决方法啊:)
谢谢: cbr7619(cbr7619
cbr7619 2003-04-03
  • 打赏
  • 举报
回复
先从源库读一条,再写入ms sql一条?为什么不从源库读所有的呢?我估计你慢就是在这个地方
(我不懂,瞎说的)
cbr7619 2003-04-03
  • 打赏
  • 举报
回复
odb.ConnectionString = GetConnectionStr("")
odb.BeginTrans
szSql = "SELECT DISTINCT tvi.owner_id, tci.transport_company_short_name, tvi.transport_company_id,tvi.split_company_id " _
& " FROM dbo.transport_vehicle_info tvi INNER JOIN dbo.transport_company_info tci ON tvi.transport_company_id = tci.transport_company_id" '车主

Set rstemp = odb.Execute(szSql)
szSql = ""

i = 1

rstemp.MoveFirst
Do While Not rstemp.EOF
szSql = "INSERT INTO owner_info(owner_id, owner_name, address, id_card, transport_company_id, split_company_id, contact, account_id,delete_state,annotation) " _
& "VALUES ('" & Trim(rstemp!owner_id) & "','" & Trim(rstemp!transport_company_short_name) & "',' ',' ','" & Trim(rstemp!transport_company_id) & "','" & Trim(rstemp!split_company_id) & "',' ',' ',0,' ')"

odb.Execute szSql, , , 0
i = i + 1
rstemp.MoveNext
Loop
odb.CommitTrans

Set odb = Nothing
Set rstemp = Nothing

也有几万条 只需30-60秒 不要6-8个小时才能完成吧
cbr7619 2003-04-03
  • 打赏
  • 举报
回复
你建立一存储过程试试
arlgil 2003-04-03
  • 打赏
  • 举报
回复
to Leftie(Leftie),for ... next循环不能解决更本问题啊,算法上面我自己可以想一些办法,关键是想知道除了:不断重复,先从源库读一条,再写入ms sql一条;以外,还有什么批量处理的方法?比如块复制之内的??

to wangluonanhai(网络男孩) ,数据是比如电话号码之内的信息。
网络老男孩了 2003-04-03
  • 打赏
  • 举报
回复
你在Foxpro 中的数据有没有什么规律?
饮水需思源 2003-04-03
  • 打赏
  • 举报
回复
用for ...next循环
arlgil 2003-04-03
  • 打赏
  • 举报
回复
谢谢 sxs69() , uploo(升级喽) ,yem9(嘟嘟猫)

我目前的困难是用vb编写一个系统,但是大数据量的转换遇到问题:从foxpro的dbf---->mssql,

所以那个excell对我不实用啊,也不能够用别的系统自带工具,我就是打算自己编写一个啊。

所以希望大家继续给我一些建议,分我会给大家的,谢谢,特别是有经验的做过的人和我联系,qq:21114341
yem9 2003-04-03
  • 打赏
  • 举报
回复
o...
sxs69 2003-04-03
  • 打赏
  • 举报
回复
这是导入EXCEL的代码,希望对你有所帮助

Dim dbs As Database
'打开数据库
sql = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\test.mdb;Persist Security Info=False"
dbs.Open sql
'把数据导入EXCEL
dbs.Execute "SELECT " & "PersonId as 住户编号, Name as 姓名, Sex as 性别," & _
" Birthday as 出生日期, Nation as 民族,NativePlace as 籍贯," & _
" Politics as 政治面貌, IdCard as 身份证号码,Study as 学历," & _
" WorkPlace as 工作单位, WorkPhone as 单位电话, HomePhone as 家庭电话," & _
" MobilePhone as 手机或BP机, CarCard as 车牌号码, StartDate as 入住日期," & _
" Patch as 片区, DepartmentId as 公寓号, UnitNo as 单元号," & _
" RoomId as 房间号, ContractId as 购房合同号 " & " INTO [Excel 8.0;DATABASE=" & App.Path & "\MyExcel.xls].[WorkSheet1] FROM " & "tbl_Tenement"
'关闭数据库对象
dbs.Close
'释放数据库对象
Set dbs = Nothing
19个字段,5万条记录,只需30-60秒
Napoleo 2003-04-03
  • 打赏
  • 举报
回复
用ADO执行SQL语句 insert
kongwzg 2003-04-03
  • 打赏
  • 举报
回复
dts是什么阿?
sql server 自带的数据导入导出工具啊!
yem9 2003-04-03
  • 打赏
  • 举报
回复
dts是什么阿?
zhp80 2003-04-03
  • 打赏
  • 举报
回复
DTS
加载更多回复(5)

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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