假设有参数化的SQL如下:INSERT INTO `tb1` (`person_name`, `age`, `else_info`) VALUES (:`person_name`, :age, :else_info);
现在需要用Delphi语言连接数据库,执行这个SQL命令,示例代码如下:
var sql := 'INSERT INTO `tb1` (`person_name`, `age`, `else_info`) VALUES (:`person_name`, :age, :else_info);';
var qry := TFDQuery.Create(nil);
try
try
qry.Connection := FDConMySQL;
qry.FormatOptions.DefaultParamDataType := ftWideString; //需要uses Data.DB 如果需要给参数赋Null值,则需要设置默认参数类型为ftWideString
qry.SQL.Clear();
qry.SQL.Add(sql);
qry.Params.ParamByName('person_name').Value := 't1';
qry.Params.ParamByName('age').Value := 1;
qry.Params.ParamByName('else_info').Value := 'info1';
qry.ExecSQL();
qry.SQL.Add(sql);
qry.Params.ParamByName('person_name').Value := 't2';
qry.Params.ParamByName('age').Value := 2;
qry.Params.ParamByName('else_info').Value := Null; // 需要设置:qry.FormatOptions.DefaultParamDataType := ftWideString;
// 使用Null,需要uses System.Variants
qry.ExecSQL();
except
on E: Exception do
begin
sExcept := E.Message;
end;
end;
finally
FreeAndNil(qry);
end;
--------------------------------------------------------------------------------
【注意事项】
--------------------------------------------------------------------------------
1、sql语句中参数形式可以是:【:`person_name`】 或 【:person_name】 或 【[id]】
2、参数赋值时,参数名不能加[]、``、:等。
【√】正确示例 :qry.Params.ParamByName('person_name').Value := 't1';
【×】错误示例1:qry.Params.ParamByName(':`person_name`').Value := 't1';
【×】错误示例2:qry.Params.ParamByName(':person_name').Value := 't1';
【×】错误示例3:qry.Params.ParamByName('[id]').Value := 't1';
3、如果需要给参数赋Null值,则需要设置默认参数类型为ftWideString,如:
qry.FormatOptions.DefaultParamDataType := ftWideString;