gpt4 book ai didi

sql - 在sql server 2008中使用delphi插入数据的最佳方法

转载 作者:行者123 更新时间:2023-12-03 14:58:16 25 4
gpt4 key购买 nike

我一直使用这样的脚本将数据插入到delphi 7中的表中

sql := 'INSERT INTO table_foo (field1,field2,field3) VALUES ('
+quotedstr('value1')
+','+quotedstr('value2')
+','+quotedstr('value3')
+')';
adoquery1.close;
adoquery1.sql.text := sql;
adoquery1.execsql;

但是我的一个 friend 刚刚向我展示了另一种看起来更干净的方法,如下所示:

sql := 'SELECT * FROM table_foo';
adoquery1.close;
adoquery1.sql.text := sql;
adoquery1.open;
adoquery1.insert;
adoquery1.fieldbyname('field1').asstring := quotedstr('value1');
adoquery1.fieldbyname('field2').asstring := quotedstr('value2');
adoquery1.fieldbyname('field3').asstring := quotedstr('value3');
adoquery1.post;

这两种方法哪一个更好(更快、更容易阅读/调试)?特别是当table_foo中的数据很大或者有很多字段需要填充时。

最佳答案

如果您确实使用 INSERT INTO 语句,请使用参数(出于可读性原因,避免 SQL 注入(inject)、SQL 缓存),例如:

adoquery1.sql.text := 'INSERT INTO table_foo (field1, field2) values (:field1, :field2)';
adoquery1.Parameters.ParamByName('field1').Value := value1;
adoquery1.Parameters.ParamByName('field2').Value := value2;

更喜欢第二种方式(有一个小调整,我将对此进行解释)。由于您要插入一条记录,因此调整是选择一个记录集,即:

SELECT * FROM table_foo where 1=0

这样您就不会选择表中的所有记录。分配值时也无需使用 QuotedStr,即:

adoquery1.FieldByName('field1').AsString := 'value1';

我使用这种方法的主要原因是它易于阅读和维护。我不需要为纯 SQL 查询而烦恼。我不需要处理有时需要指定参数数据类型的参数(例如 Parameters.ParamByName('field1').DataType := ftInteger)。无需ParseSQL。我只是使用 DataSet As(Type) 例如

FieldByName('field1').AsBoolean := True;

如果我需要在单个事务中插入多条记录,我也更愿意使用此方法。第二种方法的缺点是通过 SELECT FROM 到 SQL 服务器的时间较短。

另一种选择是创建一个 SQL 存储过程,将您的值传递给 SP,然后在 SP 内写入所有 SQL 逻辑。

关于sql - 在sql server 2008中使用delphi插入数据的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18822687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com