![](/img/trans.png)
[英]Arithmetic overflow error converting varchar to data type numeric -error
[英]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.