以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]数据写入远程数据库速度过慢 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=104052) |
-- 作者:magus1123 -- 发布时间:2017/7/21 20:59:00 -- [求助]数据写入远程数据库速度过慢 现在的情况是这样的,每天有三张表的数据要导入到系统里,然后第二天将昨天导入的数据清除,然后重新将新数据导入进去。每张表格数据大概7000行。 现在用的是阿里云的服务器,导入一张表格耗时10分钟,每天光等就要等半小时。。。 用的源码是这个: Dim dlg As new OpenFileDialog dlg.Filter = "excel|*.xls" If dlg.ShowDialog = DialogResult.OK Then DataTables("当前库存").DataRows.Clear Dim mg As New Merger mg.SourcePath = dlg.FileName mg.Format = "excel" \'指定格式 mg.SourceTableName = "数据段1$" \'指定要合并的表 mg.DataTableName = "当前库存" \'指定接收数据的表 mg.Merge() \'开始合并 End If 表格“当前库存”为外部数据表。 老师有别的更好的方式吗?
|
-- 作者:有点蓝 -- 发布时间:2017/7/21 21:19:00 -- 参考:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=84350&authorid=0&page=0&star=1 |
-- 作者:magus1123 -- 发布时间:2017/7/21 21:28:00 -- 看了几遍。。没看懂什么意思。。。。 |
-- 作者:有点蓝 -- 发布时间:2017/7/21 21:50:00 -- 第一种用法,按照注释改改,自己测试,还是看不懂的,回头学学vb.net的基础 Dim tran As System.Data.SqlClient.SqlTransaction try Dim conn As new System.Data.SqlClient.SqlConnection("server=voyo;uid=sa;pwd=hailun.;database=Test") \'改为自己数据库的连接字符串 conn.Open() \'打开链接 tran = conn.BeginTransaction() Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping("第一列", "第一列") \'改为自己的列名,有多少列就增加多少个 Dim mapping2 As new System.Data.SqlClient.SqlBulkCopyColumnMapping("第二列", "第二列") Dim copy As new System.Data.SqlClient.SqlBulkCopy(conn, System.Data.SqlClient.SqlBulkCopyOptions.Default, tran) Copy.ColumnMappings.Add(mapping1) Copy.ColumnMappings.Add(mapping2) copy.DestinationTableName = "表D" \'指定服务器上目标表的名称 copy.BatchSize = 1000 copy.WriteToServer(DataTables("表D").basetable) \'你的datatable名字,执行把DataTable中的数据写入DB tran.Commit() \'提交事务 msgbox("OK") catch ex As exception msgbox(ex.message) tran.Rollback() \'返回False 执行失败! End try 第二种用法,还是看不懂的回头看看帮助【编程基础】和【Foxtable编程】这2章内容 ‘函数的参数用法看函数代码注释,改为自己的表名和列名进行测试 Dim strlist As List(Of String) = Functions.Execute("sql提取函数",Tables("凭证"),"凭证","_Identify","[_Identify]","摘要|科目名称|科目编码|部门编码|供应商名称","摘要|科目名称|科目编码|部门编码|供应商名称",1) Dim sql As String Dim cmd As New SQLCommand cmd.C Dim Count As Integer = 0 try Connections("cs").BeginTransaction For Each s As String In strlist cmd.CommandText = s Count += cmd.ExecuteNonQuery() output.show(s) Next Connections("cs").Commit \'提交事务,所有操作生效 Catch ex As Exception \'如果出错 msgbox(ex.message) Connections("cs").Rollback() \'回滚事务,撤销所有操作 End Try Tables("凭证").DataTable.BaseTable.AcceptChanges() \'提交修改 |
-- 作者:magus1123 -- 发布时间:2017/7/22 0:32:00 -- 已经用方法一成功解决!!谢谢老师! 给狐友们参考数据: 1、用原来的导入方式,7000行数据耗时10MIN 2、用老师的SQL语句,同样数据耗时3秒!不过需要做多另外一张格式一样的内部表,要导入的数据先用方法一导入到内部表,然后用方法二合并到外部数据表里。
|
-- 作者:有点蓝 -- 发布时间:2017/7/22 8:33:00 -- 第一步可以直接导入窗口表的:http://www.foxtable.com/webhelp/scr/2334.htm |