Foxtable(狐表)用户栏目专家坐堂 → 数据保存问题


  共有1566人关注过本帖树形打印复制链接

主题:数据保存问题

帅哥哟,离线,有人找我吗?
dengk03
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:205 积分:1969 威望:0 精华:0 注册:2017/8/17 12:59:00
数据保存问题  发帖心情 Post By: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)

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/20 23:27:00 [只看该作者]

如果有错误,会回滚操作的,所以数据不会保存。

 

msgbox(ex.message)

Connections("cs").Rollback() '回滚事务,撤销所有操作
 
如果是sqlserver数据库,你要改一下【sql提取函数】,你要把#改成单引号'
 
 

 回到顶部
帅哥哟,离线,有人找我吗?
dengk03
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:205 积分:1969 威望:0 精华:0 注册:2017/8/17 12:59:00
  发帖心情 Post By:2017/9/20 23:40:00 [只看该作者]

果然是这个问题,感谢老师!
另外请问下,600多行数据阿里云数据库,36秒会不会还是有点慢?还有更快的方法么?直接保存大约要一两分钟的样子。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/20 23:49:00 [只看该作者]

以下是引用dengk03在2017/9/20 23:40:00的发言:
果然是这个问题,感谢老师!
另外请问下,600多行数据阿里云数据库,36秒会不会还是有点慢?还有更快的方法么?直接保存大约要一两分钟的样子。

 

你测试一下,时间用在什么地方了。是用在了生成sql那里,还是用在了事务Commit那里,还是用在了提交之后?

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/20 23:50:00 [只看该作者]

 如果单纯是导入数据,建议使用 System.Data.SqlClient.SqlBulkCopy

 回到顶部
帅哥哟,离线,有人找我吗?
dengk03
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:205 积分:1969 威望:0 精华:0 注册:2017/8/17 12:59:00
  发帖心情 Post By:2017/9/21 [只看该作者]

  用时都在这一部分了。

 For Each s As String In strlist
        cmd.CommandText = s
        Count += cmd.ExecuteNonQuery()
        output.show(s)
    Next

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/21 9:08:00 [只看该作者]

1、尝试去掉这句代码 output.show(s)

 

2、你尝试不执行 cmd.ExecuteNonQuery() 改成把所有语句合并成一条sql语句再执行呢?


 回到顶部