我正在尝试使用以下代码将字段添加到数据库中:
adoquery1.Close;
ADOQuery1.SQL.Clear;
adoquery1.SQL.Text := 'INSERT INTO tbllogin (txusername, txpassword, link, full_name) VALUES ("' + e1 + '","' + e2 + '","' + cb2 + '","' + e4 + '");';
adoquery1.Open;
adoquery1.Close;
e1,e2,e4和cb2是使用的变量。
这是查询的一个示例:
这是我得到的错误:
Microsoft Jet 4.0 OLE DB提供程序
我不知道如何解决这个错误,感谢任何帮助!
答案 0 :(得分:9)
SELECT
是唯一应与ADOQuery.Open
一起使用的语句,因为它通过选择行并返回它们来返回行集。
INSERT
,'更新'和'删除'(以及CREATE
,DROP
和ALTER
)不返回行集,因此您应该使用而是ADOQuery.ExecSQL
。
ADOQuery1.SQL.Clear;
adoquery1.SQL.Text := 'INSERT INTO tbllogin (txusername, txpassword, link, full_name) VALUES ("' + e1 + '","' + e2 + '","' + cb2 + '","' + e4 + '");';
adoquery1.ExecSQL;
此外,请在此处对 SQL注入进行一些研究,并停止连接您的SQL。首先学习使用参数化语句正确地完成它。它不仅更安全,而且从DBMS提供更好的性能。编写上述INSERT
的正确方法是这样的:
ADOQuery1.SQL.Clear;
adoquery1.SQL.Add('INSERT INTO tbllogin');
ADOQuery1.SQL.Add('(txusername, txpassword, link, full_name)');
ADOQuery1.SQL.Add('VALUES (:txusername, :txpassword, :link, :full_name)');
ADOQuery1.Parameters.ParamByName('txusername').Value := e1;
ADOQuery1.Parameters.ParamByName('txpassword').Value := e2;
ADOQuery1.Parameters.ParamByName('link').Value := cb2;
ADOQuery1.Parameters.ParamByName('full_name').Value := e4;
ADOQuery1.ExecSQL;