以下是修改一条记录的代码:      public int ChangUserInfo(UserVO changUserVO)
        {
            UserVO myUserVO = changUserVO;
            int flag = 0;
            myConnection.Open();
            string sql = "update [user] set Username='" + myUserVO.UserName + "',Password='"+myUserVO.PassWord+"',Status="+myUserVO.Status+" where ID =" + myUserVO.ID + "";
            OleDbCommand myCmd = new OleDbCommand(sql, myConnection);
            flag = myCmd.ExecuteNonQuery();
            myConnection.Close();
            return flag;
        }
测试时报“UPDATE语法错误”但我把 string sql 改为:     string sql = "update [user] set Username='" + myUserVO.UserName + "',Status=1 where ID =" + myUserVO.ID + "";   又不报错。到底是怎么回事?所有变量类型都没有问题,取值也没有问题,真郁闷。

解决方案 »

  1.   

    有可能是myUserVO.PassWord含有单引号
      

  2.   


    public int ChangUserInfo(UserVO changUserVO)
        {
            UserVO myUserVO = changUserVO;
            int flag = 0;
            myConnection.Open();
            string sql = "update [user] set Username='" + myUserVO.UserName + "',Password='" + myUserVO.PassWord + "',Status=@Status where ID =" + myUserVO.ID + "";
            System.Data.SqlClient.SqlParameter para = new System.Data.SqlClient.SqlParameter();
            para.DbType = DbType.Int32;
            para.ParameterName = "Status";
            para.Value = Convert.ToInt32(myUserVO.Status);
            
            OleDbCommand myCmd = new OleDbCommand(sql, myConnection);
            myCmd.Parameters.Add(para);
            flag = myCmd.ExecuteNonQuery();
            myConnection.Close();
            return flag;
        } 
      

  3.   

    string sql = "update [user] set Username='" + myUserVO.UserName + "',Password='"+myUserVO.PassWord+"',Status="+myUserVO.Status+" where ID =" + myUserVO.ID + "";
    直接在这打个断点,跟踪调试一下不就知道了吗?
    看看Password和Status的字段都是什么类型的。
      

  4.   

    password 字段是否超长?
    最好把跟踪到的sql贴出来,这样才能看出错误
      

  5.   

    错误没有看出来,不过觉得你最后的那个“”是没有什么意义的。可以去掉。你最好把最后拼成的Sql值拿出来看一下到底是哪里错了。
      

  6.   

    估计你Password字段,数据库的设置短了
      

  7.   

    把字段用[]括起来,好像是password还是哪个冲突了
      

  8.   

    sql语句最后一面    where ID =" + myUserVO.ID + ""; 改成   where ID =" + myUserVO.ID; 
    试试。建议lz看看数据库各个属性是否正确
      

  9.   

    有可能password字段和数据库中字段冲突了~~
    楼主,跟踪下
      

  10.   

    Status="+myUserVO.Status+"where ID =" 
    where 前面加空格了没????
      

  11.   

    如果是数据类型问题或字段长短问题,是不会报语法错误的!要么就是与SQL关键字冲突,要么就是哪里有单引号。
      

  12.   

    password 是关键字
    用[]引起来
    为什么参数不都用SqlParameter ??很怪哦!
      

  13.   

    谢谢大家,原来是PASSWORD字段的问题,加了[]就搞定了,再次感谢!