程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了无法从 SQL 表中查询字符串大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决无法从 SQL 表中查询字符串?

开发过程中遇到无法从 SQL 表中查询字符串的问题如何解决?下面主要结合日常开发的经验,给出你关于无法从 SQL 表中查询字符串的解决方法建议,希望对你解决无法从 SQL 表中查询字符串有所启发或帮助;

当在 TEdit 中选择一个项目时,我试图将组的值从数据库传递到 TComboBox。但是,返回的值应该是字符串,而不是整数。在组的文本字段中,返回的值为 0。谁能帮我解决这个问题?

这是应该根据在 TComboBox 中选择的项目返回组数据的文本字段的代码:

ADOquery1.sql.Clear;
rf := ADOquery1.sql.Add('SELECT grouppp FROM f3_sheet WHERE holder =  "' +cb1.Text +'"');
gpp.Text := rf;

解决方法

TADOQuery.SQL 属性是一个 TStrings 对象。它的 Add() 方法返回您刚刚添加到列表中的字符串的 index。这就是为什么在您的示例中返回值是整数 0

在这种情况下,这不是您想要的。根据需要填写SQL语句后,然后需要通过调用TADOQuery.open()方法在数据库上实际执行该SQL,然后才能读取检索到的字段TADOQuery.Fields 集合中的值,例如:

ADOQuery1.SQl.Text := 'SELECT grouppp FROM f3_sheet WHERE holder = ' + AnsiQuotedStr(cb1.Text,'"');
ADOQuery1.open;
try
  if not ADOQuery1.Eof then
    gpp.Text := ADOQuery1.Fields[0].AsString
  else
    gpp.Text := '';
finally
  ADOQuery1.Close;
end;

如此,请注意我如何将您的 SQL 更改为使用 AnsiQuotedStr(),而不是手动用引号将 cb1.Text 括起来。如果允许用户在 TComboBox 中输入任意文本,您的原始代码会遭受潜在的SQL 注入攻击

例如,如果用户在 "; deletE FROM f3_sheet; -- 中输入类似 TComboBox 的内容,您的原始代码最终将执行此 SQL:

SELECT grouppp FROM f3_sheet WHERE holder = ""; deletE FROM f3_sheet; --"

你的数据库表的内容将会再见

TComboBox 设为只读是减轻这种攻击的一种方法,这样只有您的代码才能指定不会破坏 SQL 的有效字符串。

使用 AnsiQuotedStr() 是另一种方式,通过转义用户文本中嵌入的引号,例如:

SELECT grouppp FROM f3_sheet WHERE holder = """; deletE FROM f3_sheet; --"

现在 SQL 将在 holder 字段中搜索文字字符串 "; deletE FROM f3_sheet; -- 并且找不到任何结果。

然而,避免这种攻击的最好方法是首先不要手工创建 SQL 语句,而是使用参数化查询存储过程。例如,上面的例子可以重写为使用这样的参数:

// make sure to set ADOQuery1.ParamCheeck=true beforehand...
ADOQuery1.SQl.Text := 'SELECT grouppp FROM f3_sheet WHERE holder = :PHolder';
ADOQuery1.Parameters.ParamByName('PHolder').Value := cb1.Text;
ADOQuery1.open;
try
  if not ADOQuery1.Eof then
    gpp.Text := ADOQuery1.Fields[0].AsString
  else
    gpp.Text := '';
finally
  ADOQuery1.Close;
end;

让数据库为您处理任何引用和转义要求。

大佬总结

以上是大佬教程为你收集整理的无法从 SQL 表中查询字符串全部内容,希望文章能够帮你解决无法从 SQL 表中查询字符串所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。