2012-10-04 248 views
0

嗨,我有一个从数据库中提取信息的excel VB程序。我的问题函数的代码如下。此代码工作多年,现在我得到一个错误:“将数据类型nvarchar转换为bigint时出错”为什么这会突然发生,什么是修复?将数据类型nvarchar转换为bigint时出错

Public Function GetGiftCardsRedeem(iColumn As Integer, sFrom As String, sTo As String) 

    Dim rsResults As New ADODB.Recordset 
    Dim sSQL As String 
    Dim iRecordCount As Integer 

    ' Assign the Connection object. 
    rsResults.ActiveConnection = gcnnDB 

    ' Extract the required records. 
    sSQL = "Select Sum(dTotalAmount) as TotalAmount from GiftCardTransactions where dtCreated between '" & sFrom & " 00:00:00' and '" & sTo & " 23:59:59'" 
    sSQL = sSQL & " and CONVERT(BigINT, sCCNumber) Between 800110110000 and 800110159999" '800110110000 
    sSQL = sSQL & " and not sCCNumber is null and sCCNumber <> ''" 


    rsResults.Open sSQL, gcnnDB, adOpenStatic, adLockReadOnly, adCmdText 
    If Not rsResults.EOF Then 
     'Let's Cycle through the records.. 
     'We need to move last and then move back first to get a correct recordCount. 

     DoEvents: DoEvents 

     Sheet1.Cells(MTD_FREEGIFTCARDS_QTY_ROW, iColumn) = rsResults.Fields("TotalAmount").Value 
    End If 
    rsResults.Close 
End Function 
+0

看看这有帮助吗? http://stackoverflow.com/questions/5828510/convert-nvarchar-to-bigint-in-sql-server-2008 –

回答

1

如果莫名其妙非数值插入到你的sCCNumber场会发生这种事。解决办法是找到价值并修复它。

或者你可以用

and ISNUMERIC(sCCNumber) = 1 
0

更换

and sCCNumber <> '' 

正如詹姆斯指出,很可能你在那里有无效数据。也许是一个额外的领先空间,或网络非破坏空间,或逗号。

我会改变最后一行,因为你需要它是12位数。

sSQL = sSQL & " and sCCNumber not like '%[^0-9]%' and len(sCCNumber) = 12" 
相关问题