我们在Small Business Server 2003平台上使用SQL Server Standard Edition 8.00.760(SP3)。 在追踪强类型数据集的无法解释的System.Data.DBConcurrencyException时,我发现了以下问题:
鉴于此表:
CREATE TABLE [dbo].[Auszahlung](
[auszahlungid] [int] IDENTITY(1,1) NOT NULL,
[spesenkonto] [decimal](10, 2) NOT NULL,
此查询最初使用强类型数据集在.NET 2.0中计算的带小数的行:
SELECT [auszahlungid], [spesenkonto]
FROM [Auszahlung]
WHERE [auszahlungid] = 35
在Sql Server Management Studio 2005客户端上运行时,我得到以下结果:
auszahlungid spesenkonto
------------ ---------------------------------------
35 0.00
(1 Zeile(n) betroffen)
但是当在Sql Server 2000上的查询分析器上运行时,我得到这个负零:
auszahlungid spesenkonto
------------ ------------
35 -.00
(1 row(s) affected)
因此,查询
SELECT [auszahlungid], [spesenkonto]
FROM [Auszahlung]
WHERE [auszahlungid] = 35
AND [spesenkonto] = 0.00
和(随后在SQL 2000查询分析器上)
SELECT [auszahlungid], [spesenkonto]
FROM [Auszahlung]
WHERE [auszahlungid] = 35
and spesenkonto = -.00
产生0行,并且使用.NET Strongly Typed DataSet的任何行更新都会引发System.Data.DBConcurrencyException,因为乐观并发限制。
问题:
这是MSSQL中的已知错误吗?
如何在不牺牲乐观并发的情况下让我们的系统再次可靠?
答案 0 :(得分:0)
也许,当使用SQL2000驱动程序时,将numeric解释为float ... 您可以尝试以下解决方法
SELECT [auszahlungid], [spesenkonto]
FROM [Auszahlung]
WHERE [auszahlungid] = 35
AND ABS([spesenkonto]) < 0.01