以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 事务处理不一致的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=60122) |
-- 作者:zpx_2012 -- 发布时间:2014/11/18 18:11:00 -- 事务处理不一致的问题 订单表在新增一行时。 在beforesavedatarow代码中用下面的代码在新增行保存时记录到日志表中 If e.DataRow.RowState = DataRowState.Added Then xgfs = "新增" str = "Insert Into Log (修改时间,操作者,部门,修改方式,表名,单据编号,识别号,辅助识别号,行号) Values(\'" & Date.Now() & "\',\'" & MyName & "\',\'" & MyGroup & "\',\'" & xgfs & "\',\'" & tb & "\',\'" & e.DataRow(Idc) & "\',\'" & e.DataRow(Idc1) & "\',\'" & e.DataRow(Idc2) & "\'," & e.DataRow("_Identify") & ")" SQLLIST.Add(str) end if 是通过调用下面的事务函数来统一执行的, Dim SqlList As List(of String) = Args(0) Try Connections(Mydata).BeginTransaction() \'开始事务 Dim cmd As new SQLCommand cmd.ConnectionName = Mydata For Each sql As String In SqlList cmd.CommandText = sql cmd.ExecuteNonQuery() Next Connections(Mydata).Commit() \'提交事务 sqlList.Clear() \'清空集合 Return "OK" Catch ex As Exception Connections(Mydata).Rollback() \'回滚事务 msgbox(ex.tostring) \'返回错误信息 sqlList.Clear() \'清空集合 Return "NG" End Try 问题是:Log记录表中却记录了这条新增的记录,但记录"_Identify"的行号列的值却0;而在后台数据据订单表中查不到这条记录,按上面的事物应该如果新增订单表不成功,那Log中的记录也会回滚也没有才对,为什么会这样,并且“_Identify”为什么会有等于0的情况? 谢谢! |
-- 作者:有点甜 -- 发布时间:2014/11/18 19:14:00 -- 例子发上来,代码不应该有你这种情况。 |
-- 作者:有点甜 -- 发布时间:2014/11/18 19:15:00 -- 再有一个,在save之前 _Identify 不是真实的 _Identify,保存之后,才会生成真正的,但不应该有0的出现。 |
-- 作者:zpx_2012 -- 发布时间:2014/11/18 19:18:00 -- 每个月偶尔会出现一两次这样的情况,所以做的例子也很难重现, 那"_Identify"的值什么情况下会为0呢?
|
-- 作者:有点甜 -- 发布时间:2014/11/18 19:24:00 -- 是不是你合成语句的时候有问题?
比如,有特殊字符 \' \\ " 等,最后影响了生成的语句 |
-- 作者:逛逛 -- 发布时间:2014/11/18 19:42:00 -- _Identify 为什么为0 俺不知道
但你的事务用法好像不妥
Log 和 行保存 好像不在一个事务中 |
-- 作者:zpx_2012 -- 发布时间:2014/11/18 20:02:00 -- 请教逛逛版主,这个事务用法哪里不妥呢?行保存时的所有相关更新其他表单数据的SQL语句是在表的beforesavedatarow事件中添加到sqllist集合中的,而日志Log是统一在全局事件beforesavedatarow代码中再加到sqllist集合中的,而在全局事件代码的最后一行才用 If Functions.Execute("tp_SQL",SQLLIST) = "NG" Then e.cancel = True End If 来统一执行所有的事务,这样不对吗? 因为偶尔会有些单据行莫明其妙的丢失掉,这个问题困扰很久但一直找不到原因,请帮忙指点一下。谢谢!
|
-- 作者:有点甜 -- 发布时间:2014/11/18 20:08:00 -- insert into 语句生成有问题,特殊字符会影响最后的语句生成的,比如 \\ \' " |
-- 作者:zpx_2012 -- 发布时间:2014/11/18 20:10:00 -- 甜老师,但合成的语句中都没有这些特殊字符啊 |
-- 作者:有点甜 -- 发布时间:2014/11/18 20:16:00 -- 那你记录一些其他其它信息,不要单独记录_Identify,下个月看原因。 |