我有這樣的SQL語句,但它返回: 「錯誤轉換VARCHAR到數字」錯誤轉化爲varchar到數字:SQL Server 2008中
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
注意:如果我把一個INTEGER沒有錯誤
完整的代碼是:
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]);
您應該**不要**將您的SQL語句連接在一起 - 這非常容易出錯並且存在SQL注入**的風險。相反 - 使用**參數化查詢!**使用參數也經常使得提供不同類型的值(如字符串,整型等)變得更加容易 –
SQL注入==非常不專業。 –
[在這裏閱讀關於如何在Delphi中使用ADOQuery參數](http://delphi.about.com/od/database/l/aa050101a.htm) –