解决 SQL查询中文本框的值

tdignan87

知名会员
已加入
2019年7月8日
留言内容
95
编程经验
Beginner
嗨,大家好,
希望有人可以在这里帮助我。

我在这里有此查询,如果我将文本框中的值硬编码到查询中,则该查询正常,否则会出现此错误?这是代码。有任何想法吗?

这很完美
C#:
  String delete_jobs = db.Query<String>("UPDATE CONFIGD SET CONFIGD.KEYVALUE = " + valueTxtBox.Text + " WHERE CONFIGD.KEYNAME = 'DisplayMixSize' and CONFIGD.SECTIONNAME = 'ProcessOptions' ").FirstOrDefault();

如果我删除了“ DisplayMixSize”,因为它应该是文本框中的值,则代码会中断,

这打破了
C#:
String delete_jobs = db.Query<String>("UPDATE CONFIGD SET CONFIGD.KEYVALUE = " + valueTxtBox.Text + " WHERE CONFIGD.KEYNAME = " + keyNameTxtBox.Text + " and CONFIGD.SECTIONNAME = 'ProcessOptions' ").FirstOrDefault();

1595332386488.png


添加了一个断点,该值在Txtbox中

1595332485904.png
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,536
地点
弗吉尼亚州切萨皮克
编程经验
10+
Notice that you dropped the single quotes around the text box value. Your first code would have the single quotes around 'DisplayMixSize', while your second code does not.

如果您实际使用参数化查询,则可以避免很多此类问题。它将在需要的地方加上引号。当前,您正在串联字符串以构建查询,尤其是如果您不清理文本框中的输入时,就容易遭受SQL注入攻击。请参阅: 查询数据库的正确方法:参数化SQL查询。 -C#教程|梦想中的代码

我将保留强制性的SQL注入攻击卡通,以帮助烙印使用参数化查询的想法:
exploits_of_a_mom.png
 

tdignan87

知名会员
已加入
2019年7月8日
留言内容
95
编程经验
Beginner
是的,加上单引号就可以了,
我通常使用参数化查询,并将更改为这种做法。像平常一样谢谢你 :)
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,933
地点
英国
编程经验
10+
该错误似乎是在抱怨一个未知的列。仔细检查表字段的拼写,您实际上不应该将您的表并入这样的语句中,因为它使您容易受到SQL注入攻击的影响。

好像跳伞运动员把我打到了重点。
 
最佳 底部