所以在我的程序中,我在各个地方大概有50个左右的文本框。我知道如何用某些内容替换单引号(在本例中为' - > \'),但我认为必须有更好的方法来执行此操作,而不是为每个文本框添加特定代码。我必须这样做,因为当这些东西被发送到数据库时,如果有一个单引号,它会给出错误。有没有办法更改默认的TextBox控件行为,以便程序中的所有文本框自动替换所有单引号\'?
编辑:
string statement = "select count(*) from users where username='@username'";
MySqlCommand command = new MySqlCommand(statement, conn);
command.Parameters.AddWithValue("@username", username);
if (Convert.ToInt32(command.ExecuteScalar()) == 1)
我一直在使用参数化代码,这就是我现在所拥有的。从我的理解,语句字符串基本上与以前相同,但我曾经有变量“用户名”,我知道使用一个参数(我称之为@username),然后创建命令。然后在parameters.addwithvalue中,它将参数username替换为变量username中的任何内容。不幸的是,这对我不起作用,我真的不明白它是如何帮助的,因为用户名仍然只是卡在命令中?
编辑:发现问题,在声明中你不需要在'@username'周围加上单引号
所以它应该是:
string statement = "select count(*) from users where username=@username";
答案 0 :(得分:6)
不要使用连接来构建SQL查询。使用适当的parametrized queries。这将使重复查询更快,并且还将消除输入清理代码(例如,用'
替换\'
)和SQL注入攻击。
答案 1 :(得分:1)
您应该使用参数化查询,不仅可以解决您遇到的问题,还可以减少SQL注入的风险。当您使用字符串连接来构建SQL查询时,您可以向SQL injection攻击者提供支持。
答案 2 :(得分:0)
你可以使用onKeyUp javascript函数或asp.net OnTextChanged事件来创建将改变引号的函数。