以文本方式查看主题 - Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp) -- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2) ---- 数据保存问题 (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=107071) |
-- 作者:dengk03 -- 发布时间:2017/9/20 22:50:00 -- 数据保存问题 阿里云数据源,用如下代码保存数据。运行后显示“18”附近语法错误,影响了xxx行,感觉数据已经保存,但是关闭项目重新打开后表里数据全无,是什么原因? 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() \'提交修改 MessageBox.Show("耗时: " & (Date.Now - st1).TotalSeconds & "秒") msgbox("影响行数:" & strlist.count)
|
-- 作者:有点甜 -- 发布时间:2017/9/20 23:27:00 -- 如果有错误,会回滚操作的,所以数据不会保存。
msgbox(ex.message) Connections("cs").Rollback() \'回滚事务,撤销所有操作
如果是sqlserver数据库,你要改一下【sql提取函数】,你要把#改成单引号\'
|
-- 作者:dengk03 -- 发布时间:2017/9/20 23:40:00 -- 果然是这个问题,感谢老师! 另外请问下,600多行数据阿里云数据库,36秒会不会还是有点慢?还有更快的方法么?直接保存大约要一两分钟的样子。
|
-- 作者:有点甜 -- 发布时间:2017/9/20 23:49:00 -- 以下是引用dengk03在2017/9/20 23:40:00的发言:
果然是这个问题,感谢老师! 另外请问下,600多行数据阿里云数据库,36秒会不会还是有点慢?还有更快的方法么?直接保存大约要一两分钟的样子。
你测试一下,时间用在什么地方了。是用在了生成sql那里,还是用在了事务Commit那里,还是用在了提交之后?
|
-- 作者:有点甜 -- 发布时间:2017/9/20 23:50:00 -- 如果单纯是导入数据,建议使用 System.Data.SqlClient.SqlBulkCopy |
-- 作者:dengk03 -- 发布时间:2017/9/21 -- 用时都在这一部分了。 For Each s As String In strlist cmd.CommandText = s Count += cmd.ExecuteNonQuery() output.show(s) Next
|
-- 作者:有点甜 -- 发布时间:2017/9/21 9:08:00 -- 1、尝试去掉这句代码 output.show(s)
2、你尝试不执行 cmd.ExecuteNonQuery() 改成把所有语句合并成一条sql语句再执行呢? |