tsql ado.net返回了不正确的行计数



在C#.NET 4.0中具有

取的阻止票

blockingCollection

样本BC_ADDTAKECOMPLETEDEDDIDDDID

我的问题是.net中的sqlcommand.executenonquery正在返回错误的行计数。
该更新在主键上,因此应该获得一行。
有时会得到正确的数字。
通常获得大于1(100-10000)的数字。
即使运行完全相同的tsql,也不总是相同的错误数字。
可以将TSQL复制到SSM,并每次获取正确的答案(1)。

update [docSVsys]  set [FTSstatus] = '1', [FTSdate] = '10/23/2012 8:51:32 AM' , 
textHash = '5b4d553360fbe733a66eebf36fa666f7', [textSize] = '39504' 
where [sID] = '1525850'

声明使用的变量,没有其他变量命名为rowsret5

int rowsRet5 = sqlCmdUpate.ExecuteNonQuery();

检查了Texthash值,只有一排更新。
它似乎执行了正确的更新,但报告了错误的计数。
鉴于计数是错误的,不愿意将其用于生产数据。

此命令在消费者端的尽头。
在此更新上方有两个.beginexecutenonquery。
这些更新是针对不同表的,不参考docsvsys。
这些桌子确实对Docsvsys有FK的参考。
在调试中,如果我停止回调(放慢速度),那么我不会遇到此错误。
我想知道任务中的beginexecutenonquery不是问题。
这个错误的划分不匹配任何Asynch Rowcounts,但在同一范围内。

此基本代码已经处理了数百万行。
没有更改任何TSQL。
转换为生产者消费者时,情况很糟糕。

将文档标记为正在进行中的文档,在生产者侧使用非常相似的TSQL,并且没有问题。该循环还具有一个beginexecutenonquery。

该问题似乎在生产者和消费者方面共享连接和命令。

是的,我意识到这显然是一件坏事。
当它是一个循环(没有生产者消费者侧)时,可以共享该命令。
当我转换为消费者生产商时,我不认为将命令分开。

最新更新