今天用ajax controltoolkit里面的rating控件做电影的等级评分时,界面上是OK的,但是写的事件处理函数并不能更新数据库中的得分。我设定的评分FSCORE=(FSCORE*(i-1)+rating)/i,i是第i次执行事件处理函数,rating就是获得的currentrating的值,不知道为啥这修改的功能就是不正确,数据库没反应。另外,currentrating这个属性的值如果绑定到FSCORE会怎样?
下面是时间处理函数的代码: 
  public static void updaterate(int f, string rating)
    {
        string constring = ConfigurationManager.ConnectionStrings["film"].ConnectionString;
        for (float i = 1; i < 100000;)
        {
            SqlConnection con = new SqlConnection(constring);
            con.Open();
            SqlCommand cmd = new SqlCommand("update FILMINFO set FSCORE=(FSCORE*(i-1)+@rating)/i where FNO=@f", con);
            cmd.CommandType = CommandType.Text;
           
            cmd.Parameters.Add("@rating", SqlDbType.Float).Value = rating;
            cmd.Parameters.Add("@f", SqlDbType.Int).Value = f;
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception err)
            {
                throw new System.Exception(err.Message);
            }
            finally
            {
                con.Close();
            }
            i = i + 1;
            break;
        }
    }不胜感激!!

解决方案 »

  1.   

    for (float i = 1; i < 100000;)
    100000你没用事务吗?你断点cmd  把生成SQL 拿查询分析器里跑一下 看能不能跑通
      

  2.   

    在SQL SERVER里面我把i用整型数替换掉,跑的通。
    之前用++i,但是它报错,可能是这里i是设成float类型,所以把i+1拿到break前面了。
    我觉得这里面的值类型搞的很晕,rating似乎传过来的时候应该是string,可是数据库里FSCORE是float类型的,毕竟平均分算下来也不可能是整数。sql里面跑的时候rating用float类型也通过了.....