1

当我在 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。

4

2 回答 2

2

即使在查询中,您也可以使用参数:

Query.SQL.Text := 'exec d_upd_calc :myparam';
Query.Prepare;
Query.ParamByName('myparam').Clear;

并且最好使用参数而不是构建完整的字符串,因为您不能处理引号并通过 SQL 注入避免安全漏洞。

于 2011-11-22T17:13:44.523 回答
1

使用 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 注入?如果是,那很好。如果没有,那么它应该。

于 2011-11-22T17:09:26.143 回答