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;
我正在尝试更新我在 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;