在DataGrid1中更新数据时出错:(NID在表中是主键,还是标识种子,int类型,长度为4)Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand
        
SqlUpdateCommand1.CommandText = "UPDATE table SET AAA= @AAA, BBB= @BBB WHERE NID = @NID"        SqlUpdateCommand1.Parameters("@NId").Value = DataGrid1.DataKeys(CInt(e.Item.ItemIndex))
        SqlUpdateCommand1.Parameters("@AAA").Value = CType(e.Item.Cells(2).Controls(0), TextBox).Text
        SqlUpdateCommand1.Parameters("@BBB").Value = CType(e.Item.Cells(2).Controls(0), TextBox).Text              SqlConnection1.Open()
        SqlUpdateCommand1.ExecuteNonQuery()
        SqlConnection1.Close()end sub*******运行时报错如下:::“/apptest”应用程序中的服务器错误。
--------------------------------------------------------------------------------此 SqlParameterCollection 中未包含带有 ParameterName“@NID”的 SqlParameter。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 此 SqlParameterCollection 中未包含带有 ParameterName“@NID”的 SqlParameter。源错误: 
......
行 216:        SqlDeleteCommand1.Parameters("@NID").Value = DataGrid1.DataKeys(CInt(e.Item.ItemIndex))
.......

解决方案 »

  1.   

    你实例化了Parameters集合中的Parameter没有?
      

  2.   

    to shalen520(Love will keep us alive):请问,如何操作呀..新手,不太明白..
      

  3.   

    SqlUpdateCommand1.CommandText = "UPDATE table SET AAA= @AAA, BBB= @BBB WHERE NID = @NID" SqlParameter[] parameters = {
    new SqlParameter("@NID", SqlDbType.BigInt,8),
    new SqlParameter("@AAA", SqlDbType.VarChar,1000),
    new SqlParameter("@BBB", SqlDbType.VarChar,1000)};        parameters[0].Value= DataGrid1.DataKeys(CInt(e.Item.ItemIndex))
            parameters[0].Value = CType(e.Item.Cells(2).Controls(0), TextBox).Text
            parameters[0].Value = CType(e.Item.Cells(2).Controls(0), TextBox).Text       foreach (SqlParameter parm in SqlParameter)
             {
    SqlUpdateCommand1.Parameters.Add(parm);
             }
            SqlConnection1.Open()
            SqlUpdateCommand1.ExecuteNonQuery()
            SqlConnection1.Close()
      

  4.   

    就是,运行这句时报错.. SqlUpdateCommand1.Parameters("@NId").Value = DataGrid1.DataKeys(CInt(e.Item.ItemIndex))
      

  5.   

    TO daishengs(横舟摆渡) :你好,谢谢你的回复,,我用的是VB.NET,看到你的代码了,,但我出错的是在你加的代码之前呢..
      

  6.   

    你在为参数赋值的时候,必须先实例化这些参数对象比如:
          //实例化
          SqlParameter param = new SqlParameter("@NID", SqlDbType.BigInt,8);      //赋值
          param.Value = DataGrid1.DataKeys(CInt(e.Item.ItemIndex));      //加到集合中
          SqlUpdateCommand1.Parameters.Add(param);
      

  7.   

    TO shalen520(Love will keep us alive):
    那我应该把实例化语句放在DataGrid1_UpdateCommand事件中就可以嘛??我查过相关的资料,,好像也放过你说的这个实例化的语句,,好像没成功...
      

  8.   

    Private Sub DataGrid1_UpdateCommand........        Dim Param = New SqlParameter("@NID", SqlDbType.BigInt, 4)
            SqlUpdateCommand1.Parameters.Add(Param)        SqlUpdateCommand1.Parameters("@NID").Value = DataGrid1.DataKeys(CInt(e.Item.ItemIndex))'''''到这还是报错呀...索引超出范围。必须为非负值并小于集合大小。参数名: index END SUB
      

  9.   

    SqlUpdateCommand1.Parameters("@BBB").Value 没有@ 
    应该是SqlUpdateCommand1.Parameters("BBB").Value吧
      

  10.   

    TO lihui_830501(阿狼):就是,运行这句时报错.. SqlUpdateCommand1.Parameters("@NId").Value = DataGrid1.DataKeys(CInt(e.Item.ItemIndex))
      

  11.   

    CType(e.Item.Cells(2).Controls(0), TextBox).Text
    应该是这句有错,它是null,取不到值
    要么你先改为        SqlUpdateCommand1.Parameters("@NId").Value = DataGrid1.DataKeys(CInt(e.Item.ItemIndex))
            SqlUpdateCommand1.Parameters("@AAA").Value = DataGrid1.DataKeys(CInt(e.Item.ItemIndex))
            SqlUpdateCommand1.Parameters("@BBB").Value = DataGrid1.DataKeys(CInt(e.Item.ItemIndex))调试一下看看,是不是CType(e.Item.Cells(2).Controls(0), TextBox).Text这里的问题。
      

  12.   

    找到原因了..是我设置的原因..DataGrid1中的属性生成品,有个数据<键字段>没有选..