1、使用ACCESS做外部数据库2、有些表使用了表达式列,包括但不限于逻辑列、字符串列
3、使用了论坛上的保存函数
If strlist.Count > 0 Then ‘strlist指的是对数据做增删改的脚本
Dim cmd As new SQLCommand()
cmd.ConnectionName = “外部数据连接名“
Try
cmd.BeginTransaction() '开启事务
For Each s As String In strlist
cmd.CommandText = s
cmd.ExecuteNonQuery()
Next
cmd.Commit() '提交事务
Catch ex As Exception '如果出错
cmd.Rollback() '则回滚事务
'MessageBox.Show(ex.Message, "错误",MessageBoxButtons.OK,MessageBoxIcon.Error)
End Try
tables("XX").DataTable.BaseTable.AcceptChanges() '提交修改
End If
现在的问题是:
(1)因为使用了一些表达式列(有些设了公式,有些没有),在项目运行过程中,难免会对表达式赋值,而一旦对表达式赋值,就会被判定为当前行修改过,导致SQL脚本的update部分会将这些列误认为数据列有改变而去后台执行
(2)实测17000行数据的时候,事务提交用时在40秒左右(即使只是表达式列有赋值而数据列没有变化,也会如此)。
解决路径可能有
(1)判断当前行是否有改变,是否能做到只判断数据列,表达式列无视?如果可以,SQL脚本行就可以少很多
(2)即使1可行,还得从事务提交的处理效率上想办法。如果17000行作为一个事务提交,排队执行,效率显然不高;如果有更多的数据,甚至是十万、百万级别,SQL脚本逐行处理,那效率可能更低了。有什么好的办法吗?