SQL DataReader 内部或外部的交易?和功能序列错误?

SQL Transaction within DataReader or outside of it? And Function Sequence Error?

目前我的代码结构(在VB.NET)如下-

Using reader As IfxDataReader = command.ExecuteReader()
    If reader.HasRows Then
        Do While reader.Read()
            Using transaction As IfxTransaction = conn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted)
                'multiple update statements
                 transaction.Commit()
            End Using
        Loop
    End If
End Using

reader正在读取多条记录,对于每条记录,有多个更新语句运行。我认为最好为每条记录开始一个事务,完成后提交,继续下一条记录并为此创建一个新事务,"rinse and repeat".

一切正常并已提交到数据库,但是当 reader 检查最后一条记录后的更多行时,会出现此特殊错误 -

ERROR [HY010][Informix .NET provider] Function sequence error.

经过一些研究,IBM 网站说我必须更新到 CSDK 3.5 或更高版本 (http://www-01.ibm.com/support/docview.wss?uid=swg1IC58696)。但是,对我来说这似乎有点不必要,因为代码工作正常,它只是在最后抛出该错误。

将事务放在 reader 之外并遍历 table 中的所有记录然后一次提交会更好吗?或者它是现在最多 efficient/optimal 的方式(换句话说,遍历每条记录,使用该记录的所有必要更新语句,并一次提交一个)?其次,前者的选择能否解决函数序列错误?

如果您计划您的应用程序以 64 位架构或 .NET FW 4x 为目标 那么你可以考虑使用CSDK 4.10 xC2或以上版本。

在代码中,有一个datareader,datareader里面有一些update语句。我通过分离这些功能改变了代码的结构方式。首先我让它读取所有数据,然后存储到对象中。然后,在完成并关闭之后,我 运行 更新语句同时遍历每个对象。这似乎解决了即将出现的函数序列错误。