ADO Recordset十进制值问题

时间:2009-12-28 19:59:53

标签: asp-classic vbscript ado

我的代码类似于

Dim A, B, C
Set rs = Server.CreateObject("ADODB.Recordset")
strSql = "Exec [dbo].[some_sp] IND"
rs.open strSql,CN,3,3

Do While Not rs.EOF

'these columns are returned as decimal(10,2) format
A = rs("col1")
B = rs("col2")

rs.MoveNext
Loop

C = A + B 'i get type mismatch error here

我使用response.write来检查A,B的值 它们是整数格式而不是十进制

我是否必须再次格式化记录集以设置小数值? 那么类型不匹配可能会出现什么问题,因为所有值都是整数(即使它们是十进制的)?

2 个答案:

答案 0 :(得分:3)

ASP / VBScript中的变量只是变体类型,因此您可能需要显式转换值。

C = CDbl(A) + CDbl(B)

但是,我的猜测是你的一行没有col1或col2的数值。当你遇到类型不匹配错误时,你知道它们的值是什么吗?

答案 1 :(得分:0)

在我的情况下,我发现小数点右边的所有内容都丢失了,实际上返回了一个整数。这是在带有ADO 2.8的Access 2007中,在DB2 / 400 v7r3服务器上调用SQL。

我尝试使用VBA.CDbl()CDec(),但是它们都不起作用。然后阅读此线程使我先尝试在服务器上进行转换,因此我将CAST的数字REAL(32位(相当于VBA中的SingleSELECT (IYONHA / WXUNIT) AS VIPCASES FROM WINEX )进行了工作,

此:

SELECT CAST(IYONHA / WXUNIT AS REAL) AS VIPCASES
FROM   WINEX

...变成了这个:

SELECT CAST(CAST(IYONHA / WXUNIT AS NUMERIC(5,2)) AS REAL) AS VIPCASES
FROM   WINEX

...然后将小数点后两位取整:

{{1}}