c#文本框可能导致我的SQL查询停止工作的字符

时间:2012-04-25 14:21:10

标签: c# sql winforms

我的WinForm中有一个文本框。

用户键入文本(键盘允许的任何内容)。当他们单击“保存”时,有时会出现带有

的错误消息
  

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

我知道像'正在打破我的SQL查询

这样的某些字符

我有几个问题

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

  

我知道某些人物喜欢'打破我的SQL查询

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

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

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

答案 2 :(得分:0)

  1. 更好的方法是使用参数化查询。见Adding Parameters to Commands。这不仅可以解决您的不良角色问题,还可以消除SQL-injection(维基百科)的危险。

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

  3. string sql = "SELECT * FROM tbl WHERE Name = '" + name.Replace("'","''") + "'";