ASP Classic - 类型不匹配:'CInt' - 简单的问题

Jam*_*ond 4 asp-classic

在ASP classic中遇到类型转换问题.

继承我的代码:

        Set trainingCost = Server.CreateObject("ADODB.Recordset")
    strSQL3 = "SELECT cost1 FROM tblMain WHERE (Booked = 'Booked') AND (Paid IS NULL) AND (PaidDate BETWEEN '01/04/" & startyear & "' AND '31/03/" & endyear & "')"
    trainingCost.Open strSQL3, Connection
    trainingCost.movefirst
    totalTrainCost = 0
    do while not trainingCost.eof
        trainCost = trainingCost("cost1")
        If NOT isNull(trainCost) then
            trainCostStr = CStr(trainCost)
            trainCostStr = Replace(trainCostStr, "£", "")
            trainCostStr = Replace(trainCostStr, ",", "")
            totalTrainCost = totalTrainCost + CInt(trainCostStr)
        end if
        trainingCost.movenext
    loop 

    trainingCost.close
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我收到以下错误:

Microsoft VBScript运行时(0x800A000D)类型不匹配:'CInt'/systems/RFT/v1.2/Extract.asp,第43行

这是"totalTrainCost = totalTrainCost + CInt(trainCostStr)"

我猜这个问题与String值是不可播放的Int有关,在这种情况下是否有任何方法可以捕获此错误?我没有使用asp经典,所以任何帮助都会有用

干杯

-编辑-

列cost1的类型是String,因为它可能包含一个数字或一系列字符,例如£10.00或TBC

T.J*_*der 12

你有几个选择.您可以通过使用IsNumeric函数提前检查值是否为数字来主动:

 If IsNumeric(trainCostStr) Then
    totalTrainCost = totalTrainCost + CInt(trainCostStr)
 Else
    ' Do something appropriate
 End If
Run Code Online (Sandbox Code Playgroud)

...或者你可以通过使用错误捕获来反应; 在Classic ASP中最容易定义一个函数并使用On Error Resume Next:

Function ConvertToInt(val)
    On Error Resume Next
    ConvertToInt = CInt(val)
    If Err.Number <> 0 Then
        ConvertToInt = Empty
        Err.Clear
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

或者返回0或Null或任何适合你的东西,然后在你的trainCost代码中使用它.

请注意,CInt需要一个整数并且将在第一个非数字处停止,因此"123.45"将返回123.查看其他转换,CDouble,CCur等.