0

我的 WinForm 中有一个文本框。

用户键入文本(他们的键盘允许的任何内容)。当他们点击保存时,有时会出现一条错误消息

查询表达式中的语法错误(缺少运算符)

我知道像 ' 这样的某些字符正在破坏我的 SQL 查询

我有几个问题

  1. 我有什么办法可以让我的查询不会中断并允许用户输入他们想要的任何内容?
  2. 如果没有办法做#1,我如何扫描文本并删除所有会破坏我的查询的字符?
4

3 回答 3

5

尝试使用参数将文本框值传递给查询。这也将防止 SQL 注入攻击。

应该是这样的:

SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT * from TableName WHERE FieldA = @FieldValue";
cmd.CommandType = CommandType.Text;

//Define SqlParameter object and assign value to the parameter
cmd.Parameters.Add("@FieldValue", SqlDbType.VarChar, 50);
cmd.Parameters["@FieldValue"].Value = TextBox.Value;
于 2012-04-25T14:25:59.607 回答
2

我知道像 ' 这样的某些字符正在破坏我的 SQL 查询

如果是这种情况,听起来您使用字符串连接来添加参数。

请改用 SQL 参数,这应该可以解决您的问题。

另外值得注意的是,使用字符串连接构建 SQL 查询很容易发生SQL 注入

于 2012-04-25T14:25:53.683 回答
0
  1. 更好的方法是使用参数化查询。请参阅向命令添加参数。这不仅可以解决您的不良性格问题,还可以消除SQL 注入(维基百科)的危险。

  2. 如果您仍然喜欢使用字符串连接,那么用两个单引号替换单引号应该足够安全。

string sql = "SELECT * FROM tbl WHERE Name = '" + name.Replace("'","''") + "'";
于 2012-04-25T14:29:16.100 回答