Delphi Adoquery SQL 添加或发短信

Delphi Adoquery SQL add or text

我正在尝试更新我在 Delphi 中的数据库,但我没有做对。

我要的很简单。这是我的代码:

form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add('Update Table1 set mark=' +Form1.Edit4.Text);
form1.ADOQuery1.ExecSQL;

所以基本上,我想要的是使用 UPDATE 函数在编辑中写入的文本进入我的数据库,其中我的数据库 table 是 table1 并且该字段是名为 mark.

您的问题中没有足够的信息来提供明确的答案。不过,我可以估计一下。

只有当 mark 定义为序数或布尔字段,并且用户在 TEdit 中输入适当的 numeric/boolean 值时,您所显示的内容才会成功。

但是,如果 mark 字段被定义为文本字段,则需要将 Text 值用引号字符括起来,否则会产生无效的 SQL 语法。

假设您输入了 Text'hello world'。您原来的 SQL 语句最终会变成以下内容,这是无效的语法:

Update Table1 set mark=hello world

您需要将文本值用引号字符括起来:

Update Table1 set mark='hello world'

或:

Update Table1 set mark="hello world"

例如:

form1.ADOQuery1.SQL.Add('Update Table1 set mark=' + QuotedStr(Form1.Edit4.Text));

或:

form1.ADOQuery1.SQL.Add('Update Table1 set mark=' + AnsiQuotedStr(Form1.Edit4.Text, #34));

使用像 (Ansi)QuotedStr() 这样的函数来避免 SQL 注入攻击很重要。这是通过确保对输入文本中的任何嵌入引号字符进行转义 属性 来完成的。否则,如果你只是做了这样的事情:

form1.ADOQuery1.SQL.Add('Update Table1 set mark="' + Form1.Edit4.Text + '"');

用户可以输入像 '"; <arbitrary SQL here>' 这样的文本值,这确实会对您的数据库造成严重破坏。

更安全的方法是使用 参数化查询,让 ADO 为您处理任何必要的 SQL 格式(确保 TADOQuery.ParamCheck 为真):

form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add('Update Table1 set mark=:Mark');
form1.ADOQuery1.Parameters.ParamByName('Mark').Value := Form1.Edit4.Text;
form1.ADOQuery1.ExecSQL;