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