当我在 Delphi 中使用 StoredProc 组件时,
ParamByname('ParamName').Clear
我能够发送 NULL 值。
但是在使用 Query 组件时如何传递 NULL 值?
with Query do
begin
SQL.ADD('exec d_upd_calc'+Quoted(EditCalc.Text));
end
在上述情况下,如果编辑框为空,我想发送 NULL。
我正在使用 Delphi 2010、Unidac 和 Sybase。
当我在 Delphi 中使用 StoredProc 组件时,
ParamByname('ParamName').Clear
我能够发送 NULL 值。
但是在使用 Query 组件时如何传递 NULL 值?
with Query do
begin
SQL.ADD('exec d_upd_calc'+Quoted(EditCalc.Text));
end
在上述情况下,如果编辑框为空,我想发送 NULL。
我正在使用 Delphi 2010、Unidac 和 Sybase。
即使在查询中,您也可以使用参数:
Query.SQL.Text := 'exec d_upd_calc :myparam';
Query.Prepare;
Query.ParamByName('myparam').Clear;
并且最好使用参数而不是构建完整的字符串,因为您不能处理引号并通过 SQL 注入避免安全漏洞。
使用 Advantage DB,我会按照以下方式做一些事情:
var
sqlText: string;
with Query do
begin
if EditCalc.Text = '' then
sqlText := 'exec d_upd_calc NULL' else
sqlText := 'exec d_upd_calc '+Quoted(EditCalc.Text);
SQL.ADD(sqlText);
end;
如果关键字也是NULL
,那么这应该有效。
是否Quoted
删除/转义任何危险的用户输入以防止 SQL 注入?如果是,那很好。如果没有,那么它应该。