string sql = "Update stdrecord set firstname='" + fname + "',lastname='" + lname + "',mobile='" + mob + "',phone='" + phn + "',city='" + city + "',province'" + prov + "'where id='" + id + "'";
错误:
System.Data.SqlClient.SqlException:语法错误
任何人都可以纠正查询吗?
答案 0 :(得分:8)
你错过了平等:
"',province = '" + prov + "' where id='" + id + "'";
不要像这样构建SQL查询。请使用ADO.Net参数。
答案 1 :(得分:1)
缺少等号:
,province='" + prov + "' where id='" + id + "'";
答案 2 :(得分:1)
string sql = "Update stdrecord set firstname='" + fname + "',lastname='" + lname + "',mobile='" + mob + "',phone='" + phn + "',city='" + city + "',province='" + prov + "'where id='" + id + "'";
您在省之后错过了=
,并且省和where
之间没有空格!
此外,在这种情况下,您对SqlInjection开放,请使用SqlCommand.Parameters。
查询应该如下所示。
string sql = @"Update stdrecord set firstname=@FName ,lastname=@LastName, mobile=@Mobile,
phone=@Phone,city=@City, province=@Province where id=@ID";
这将保护您免受SqlInjection的攻击,并且sql server也会缓存您的查询。
要使用命令参数,您需要将此代码添加到SqlCommand
SqlCommand cmd = new SqlCommand(sql, connectionString);
cmd.Parameters.AddWithValue("@FName", fName);
cmd.Parameters.AddWithValue("@LastName", lname );
cmd.Parameters.AddWithValue("@Mobile", mob);
cmd.Parameters.AddWithValue("@Phone", phn);
cmd.Parameters.AddWithValue("@City", city);
cmd.Parameters.AddWithValue("@Province", prov);
cmd.Parameters.AddWithValue("@ID", id);
使用此结构,您将来不会遇到这样的问题,因为您不会添加+
和'
非停止。在构建字符串时也使用@
,这样就可以在不使用+
的情况下在多行上写字符串。
答案 3 :(得分:-2)
在Where
条款之前放置一个空格并在省列中等号,将完美地运作