错误原因如题:
   当数据更新的时候提示如题信息,不知错在那里,请各位高手指点,先谢谢了,更新的代码如下:string updateCmd = "UPDATE 员工信息表 SET 学号=@学号, 姓名 = @姓名, 性别 = @性别, 年龄 = @年龄,密码=@密码,员工类型=@员工类型";

SqlCommand myCommand=new SqlCommand(updateCmd,myConnection);myCommand.Parameters.Add(new SqlParameter("@学号",SqlDbType.Char,10));
myCommand.Parameters.Add(new SqlParameter("@姓名",SqlDbType.Char,8));
myCommand.Parameters.Add(new SqlParameter("@性别",SqlDbType.Char,2));
myCommand.Parameters.Add(new SqlParameter("@年龄",SqlDbType.Int,4));
myCommand.Parameters.Add(new SqlParameter("@密码",SqlDbType.VarChar,20));
myCommand.Parameters.Add(new SqlParameter("@员工类型",SqlDbType.Char,10));myCommand.Parameters["@学号"].Value = DataGrid1.DataKeys[e.Item.ItemIndex];
myCommand.Connection.Open();
   try
     {
myCommand.ExecuteNonQuery();
DataGrid1.EditItemIndex=-1;
     }
   catch
    {
    }
myCommand.Connection.Close();
BataGrid();
}

解决方案 »

  1.   

    1.DataGrid1绑定时候有没有指明
    DataGrid1.DataKeys=....
    2.Update一般需要配合where子句,否则所有记录都会更新
    3.你的参数除了学号,其它都没有赋值
      

  2.   

    1 我能动态指定DataGrid1.DataKeys=...
    关键是错误提示是:索引超出范围。必须为非负值并小于集合大小。参数
    这个参数怎么是0,请各位指点,谢谢
      

  3.   

    这条语句出错myCommand.Parameters["@学号"].Value = DataGrid1.DataKeys[e.Item.ItemIndex];
      

  4.   

    幸亏错误了
    否则你可惨了你的Update语句竟然没有where子句
      

  5.   

    我知道UPDATE语句没有带where子句,但不存在语法错误,可关键是DataGrid1.DataKeys[e.Item.ItemIndex];索引超出范围。必须为非负值并小于集合大小,什么意思,请高手指点,DataGrid1.DataKeys=....我可以动态指定的
      

  6.   

    还有,我现在要大家只解释DataGrid1.DataKeys[e.Item.ItemIndex];索引超出范围。必须为非负值并小于集合大小,怎么处理
      

  7.   

    绑定DataGrid1时,有没有:
    DataGrid1.DataKeyField="学号";
      

  8.   

    当然我绑定DataGrid1.DataKeyField="学号"了
      

  9.   

    同样的问题,请大家解释下:
    string strConn=ConfigurationSettings.AppSettings["dsn"];
    SqlConnection cn=new SqlConnection(strConn);
    string strsql="update users set UID=@uid,upassword=@password,uPower=@kind where id=@Userid";
    SqlCommand cm=new SqlCommand(strsql,cn);SqlParameter  parm1=new SqlParameter("@uid",SqlDbType.VarChar,50);
    parm1.Value=((TextBox)e.Item.FindControl("UID")).Text;SqlParameter  parm2=new SqlParameter("@password",SqlDbType.VarChar,50);
    parm1.Value=((TextBox)e.Item.FindControl("upassword")).Text;SqlParameter parm3=new SqlParameter("@kind",SqlDbType.VarChar,50);
    parm3.Value=((TextBox)e.Item.FindControl("uPower")).Text;
    SqlParameter parm4=new SqlParameter("@Userid",SqlDbType.BigInt,8);
    parm4.Value=DataGrid1.DataKeys[(int)e.Item.ItemIndex];

    cm.Parameters.Add(parm1);
    cm.Parameters.Add(parm2);
    cm.Parameters.Add(parm3);
    cm.Parameters.Add(parm4);cm.Connection.Open();
    try
    {
    cm.ExecuteNonQuery();

    Response.Write("<script language='javascript'> alert('数据更新成功')</script>");
    }
    catch
    {
    Response.Write("<script language='javascript'> alert('数据更新失败')</script>");
    }
    finally
    {
    DataGrid1.EditItemIndex=-1;
    cm.Connection.Close();
    BindGrid();
    }
    上述代码提示:未将对象引用设置到对象的实例。 
    parm1.Value=((TextBox)e.Item.FindControl("UID")).Text;
    为什么?
      

  10.   

    写错了,parm1.Value=((TextBox)e.Item.FindControl("upassword")).Text;
    该为 parm2.Value=((TextBox)e.Item.FindControl("upassword")).Text;
      

  11.   

    你设置DataGrid1.DataKeyField 这个属性了吗?