我的WinForm中有一个文本框。
用户键入文本(键盘允许的任何内容)。当他们单击“保存”时,有时会出现带有
的错误消息查询表达式中的语法错误(缺少运算符)
我知道像'正在打破我的SQL查询
这样的某些字符我有几个问题
答案 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)
更好的方法是使用参数化查询。见Adding Parameters to Commands。这不仅可以解决您的不良角色问题,还可以消除SQL-injection(维基百科)的危险。
如果您仍然喜欢使用字符串连接,那么用两个单引号替换单引号应该足够安全。
string sql = "SELECT * FROM tbl WHERE Name = '" + name.Replace("'","''") + "'";