[英]An arithmetic overflow error occurred while converting varchar to numeric data type in SQL Server 2008
[英]error converting varchar to numeric : SQL Server 2008
我有此SQL語句,但返回:“將varchar轉換為數值時出錯”
ADOTailles.SQL.Text := 'INSERT INTO tailles (numOF, taille, quantite, prixVente) VALUES(''' + numOF.Text + ''',''' + C.Caption + ''',''' + Q.Text + ''',''' + P.Text + ''')';
ADOTailles.ExecSQL
數字字段為prixVente;
我用了這個,但是還是一樣的錯誤:
ADOTailles.SQL.Text := 'INSERT INTO tailles (numOF, taille, quantite, prixVente) VALUES(''' + numOF.Text + ''',''' + C.Caption + ''',''' + Q.Text + ''',CAST(''' + P.Text + ''' AS numeric(5, 2)))');
ADOTailles.ExecSQL
注意:如果我輸入一個整數沒有錯誤
完整的代碼是:
var
I: Int8;
C: TCheckBox;
Q, P: TEdit;
for I := 1 to 16 do Begin
C := FindComponent('T' + IntToStr(I)) as TCheckBox;
Q := FindComponent('Q' + IntToStr(I)) as TEdit;
P := FindComponent('P' + IntToStr(I)) as TEdit;
if C.Checked = True then begin
ADOTailles.SQL.Text := 'INSERT INTO tailles (numOF, taille, quantite, prixVente) VALUES(''' + numOF.Text + ''',''' + C.Caption + ''',''' + Q.Text + ''',''' + P.Text + ''')';
ADOTailles.ExecSQL
end;
End;
沒有SQL注入,因為我使用以下代碼:
StringReplace(aricleFilter.Text, '''', '', [rfReplaceAll]);
也許您的字符串中沒有數字符號或不正確的十進制分隔符(例如,“,”而不是“。”)。
您將報價的價格放在報價之間
... ''',''' + P.Text + ''')';
這就是導致SQLServer嘗試從varchar轉換為數字的原因。 為防止這種情況,您將必須刪除引號:
... ''',' + P.Text + ')';
並確保P.Text包含SQL Server期望的小數和千位分隔符。 最好僅使用小數點分隔符。 您始終可以使用StrToFloat或StrToFloatDef(以P.Text作為輸入)進行轉換,然后為SQLServer重新格式化。
據我所知,SQL Server期望SQL語句中使用美國分隔符,這意味着您需要使用點作為小數點分隔符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.