日期:2014-05-17  浏览次数:20405 次

VS2008+SQL Server2005 C# 更新数据库中的数据时,提示语法错误,怎么改呢?
string StrSql = "update tb_Message set UserName='" + Session["UserName"].ToString() + "',HF_Content='" + 
this.FCKeditor1.Value + "',HF_IP='" + Request.UserHostAddress.ToString() + "',HF_Time='" + DateTime.Now.ToString() + "' where MessageID=" + Request["id"];

进行数据库更新时,提示“=”附近有语法错误。这条语句到底哪里错了呢?

------解决方案--------------------
MessageID=" + Request["id"]估计是这里,因为这里有可能是null或者不是数字类型,即使是数字类型你也还是用Convert.ToInt32(Request["id"])更好,你断点试试
------解决方案--------------------
将StrSql提到查询分析器中执行,一眼就看出来了。。。
估计this.FCKeditor1.Value中值有问题,可能有'符号
------解决方案--------------------
使用参数化的语法,安全性和错误都很少出现

string StrSql = "update tb_Message set UserName=@UserName,HF_Content=@HF_Content,HF_IP=@HF_IP,HF_Time=@HF_Time where MessageID=@MessageID";

cmd.Parameters.AddWithValue("@UserName",Session["UserName"].ToString());

其他做法类似

------解决方案--------------------
这是sql语句错误,你
Response.Write(StrSql )
看是什么啊
------解决方案--------------------
MessageID字段是数字类型,不要加引号
------解决方案--------------------
估计是this.FCKeditor1.Value里面的内容含有引号,导致构造的SQL语句出现错误
你可以用一个简单的字符串如:1234567890来测试一下。
建议使用调用存储过程的方式来执行SQL语句,即Parameters.Add的方式
------解决方案--------------------
string StrSql = "update tb_Message set UserName='" + Session["UserName"].ToString() + "',HF_Content='" +
this.FCKeditor1.Value + "',HF_IP='" + Request.UserHostAddress.ToString() + "',HF_Time='" + DateTime.Now.ToString() + "' where MessageID=" + Request["id"];

在后面加上Response.Write(strSQL);
Response.End();
------解决方案--------------------
string StrSql = "update tb_Message set UserName='" + Session["UserName"].ToString() + "' where MessageID='"+Request["id"]+"'";
上面这个运行下看下,看报什么错,如果是类型问题 就换下
string StrSql = "update tb_Message set UserName='" + Session["UserName"].ToString() + "' where MessageID='"+Convert .ToInt32 ( Request["id"].ToString ())+"'";