0

在 ADODB 连接字符串中将提供程序从 SQLOLEDB 更改为 MSOLEDBSQL 时,我们收到错误:

-2147217864 无法找到要更新的行。自上次读取以来,某些值可能已更改。

连接字符串是:

Provider=MSOLEDBSQL;SERVER=servername;APP=Applicationname;DATABASE=databasename;WSID=id;Trusted_Connection=yes;MARS Connection=True;DataTypeCompatibility=80

代码如下:

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient 
rs.Open("SELECT * FROM tableName WHERE 1 = 2", Adoconnection, adOpenStatic, adLockBatchOptimistic, CommandTypeEnum.adCmdText) 
rs.AddNew
'Add the fields
...
...
rs.UpdateBatch ''this line throws error

现在,当提供者的连接字符串更改为 SQLOLEDB 时,使用相同的代码它可以正常工作,没有任何问题。

4

2 回答 2

0

尝试将时间戳或所谓的“rowversion”列添加到表中。(使用类型时间戳 - 与时间有关的为零)。

此外,如果该表中有任何位列,请确保它们不为空,并确保为该位列设置默认值 (0)。

如果应用程序具有链接表,则在您进行上述更改服务器端后重新链接您的表。

于 2021-12-08T10:20:45.763 回答
0

我发现了问题,它在 SQL 触发器中。

相应的表在触发器上有一些更新语句。SET NOCOUNT ON在触发器中的更新语句之前添加帮助我避免了这个错误。

于 2021-12-28T10:04:09.450 回答