更新查询问题C#

时间:2014-12-03 09:54:14

标签: c# sql asp.net

string sql = "Update stdrecord set firstname='" + fname + "',lastname='" + lname + "',mobile='" + mob + "',phone='" + phn + "',city='" + city + "',province'" + prov + "'where id='" + id + "'";

错误:

  

System.Data.SqlClient.SqlException:语法错误

任何人都可以纠正查询吗?

4 个答案:

答案 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条款之前放置一个空格并在省列中等号,将完美地运作