簡體   English   中英

將varchar轉換為數值類型-VBA的算術溢出錯誤

[英]Arithmetic overflow error converting varchar to data type numeric -VBA

我正在嘗試使用文本文件作為輸入從SQL Server提取數據,但出現錯誤:

將varchar轉換為數值類型的算術溢出錯誤

如果以下代碼錯誤或需要添加其他任何內容,請告訴我:

Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim ConnectionString As String
Dim StrQuery As String
Dim iCols As Integer
Dim X As Double
Dim TXT As String
Dim Y As String
Dim A As Double

strcon = "Provider=SQLOLEDB;Data Source=SERVER1;Initial Catalog=MYDB;Integrated Security=SSPI;"
cnn.Open strcon
cnn.CommandTimeout = 900

Open "C:\Users\Gaurav.Shrivastava\Desktop\SLIp\New folder\TESTING.txt" For Input As 1
X = 0

Do While Not EOF(1)
    Line Input #1, TXT
    Y = Val(TXT)
    A = Y
    StrQuery = "Select * from FRA_RETAIL where COM_A_NO=" & A & ""
    rst.Open StrQuery, cnn
    X = X + 1
Loop

For iCols = 0 To rst.Fields.Count - 1
    Worksheets("Sheet1").Cells(1, iCols + 1).Value = rst.Fields(iCols).Name
Next

Sheets(1).Range("A2").CopyFromRecordset rst
'rst.Close
'cnn.Close
'Set rst = Nothing
'ActiveWorkbook.Close SaveChanges:=True
'Application.Quit

'Application.ActiveWindow.Close

您的輸入文件中似乎有無效數據。 最好的辦法是清理數據或在執行查詢之前檢查值。 另外,您的代碼容易受到SQL注入的攻擊。 如果此文件中包含9; delete from FRA_RETAIL; --行,該怎么辦? 9; delete from FRA_RETAIL; -- 9; delete from FRA_RETAIL; --

您應針對此類查詢使用參數 (假設COM_A_NO為小數(18,0)):

Sub ProcessLine(ByRef A As String)

    Dim Cn As ADODB.Connection
    Dim Cm As ADODB.Command
    Dim Pm As ADODB.Parameter
    Dim Rs as ADODB.Recordset

    Set Cn = New ADODB.Connection
    Cn.Open "Provider=SQLOLEDB;Data Source=SERVER1;Initial Catalog=MYDB;Integrated Security=SSPI;"
    Set Cm = New ADODB.Command
    With Cm
        .ActiveConnection = Cn
        .CommandText = "Select * from FRA_RETAIL where COM_A_NO=TRY_CAST(? as DECIMAL(18,0));"
        .CommandType = adCmdText

        Set Pm = .CreateParameter("no", adVarChar, adParamInput, 200, A)

        .Parameters.Append Pm

        Set Rs = .Execute
    End With

End Sub

另外,強烈建議在代碼中添加一些錯誤處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM