以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  数据保存问题  (http://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语句再执行呢?