小心 SQL 中加减乘除小数将 int 转换成 decimal 导致类型错误

作者:vkvi 来源:ITPOW(原创) 日期:2011-2-3

首先

SQL Server 中有一个字段类型为 decimal,取出的 decimal 字段进入 ASP/ASP.NET 后并不是数字类型。说明 SQL Server 的 decimal 与 ASP.NET 的 decimal 类型不同,ASP.NET 的 decimal 是数字。

如下代码会发生类型不匹配的错误:

而即使我们的字段不是 decimal,是整数(比如 int、tinyint),经过与小数的运算,也会变成 decimal,如下代码也会发生类型不匹配的错误:

类型不匹配是因为 rs("cnt") 并不是数字,所以需要对 rs("cnt") 进行 CSng 或类似的强制类型转换。

而出现这种问题的原因,是我们将 readTimes 加了一个 0.5,不止是加,减、乘、除也是一样的。但如果不是与一个小数进行运算,而是整数,比如 1,取出来就是数字。

float 等不受影响

因为 float 本来就是支持小数的,与小数进行运算,仍然保持原有类型。

相关文章