我用datagrid中edit,用update修改数据,可惜出现了一个问题,开始没有问题,一改后就出现了,
System.Data.SqlClient.SqlException: 被准备语句 '(@username varchar(50),@firstname nchar(50),@lastname nchar(50),' 需要参数 @username,但未提供该参数。我找不出,帮帮忙。

解决方案 »

  1.   

    就是说你少了一条将用户名称(userName)文本框的值赋给储存过程的语句
      

  2.   

    sub udg_update(sender as object,e as datagridcommandeventargs)
        
        
                dim ds as Dataset
        
        
                dim comm as sqlcommand
                dim updatecmd as string="update tblusers set [username]=@username,firstname=@firstname,lastname=@lastname,password=@password,userid=@userid where userid=@userid"
        
             comm=new sqlcommand(updatecmd,conn)
        
             comm.parameters.add(new sqlparameter("@username",SqlDbType.varChar,50))
             comm.parameters.add(new sqlparameter("@firstname",SqlDbType.NChar,50))
             comm.parameters.add(new sqlparameter("@lastname",SqlDbType.NChar,50))
             comm.parameters.add(new sqlparameter("@password",sqldbtype.varchar,50))
             comm.parameters.add(new sqlparameter("@userid",SqlDbType.NChar,4))
        
             dim cols as string()={"@username","@firstname","@lastname","@password","@userid"}
            
        
             comm.Connection.Open()
        
              
             comm.executenonquery()
        
        
             message.innerhtml="success"运行有用,能看到数据,就是修改不了
      

  3.   


             message.innerhtml="successful"
        
        
             udg.edititemindex=-1
        
        
        'catch exp as sqlexception
        'if exp.number=2627
        'message.innerhtml="error"
        'else
        'message.innerhtml="error"
        'end if
        'end try
        
             comm.connection.close()
             bindgrid()
        
             end sub
        
             sub bindgrid()
             dim ds as dataset
             dim comm as sqlcommand
        
             Dim adpProducts As SqlDataAdapter = new SqlDataAdapter()
        
        
        
             comm =new sqlcommand("select * from tblusers",conn)
             adpproducts.selectcommand=comm
             ds=new dataset()
             adpproducts.fill(ds)
        
             udg.datasource=ds.tables(0).defaultview
             udg.databind()
        
             end sub
        
             Sub udg_SelectedIndexChanged(sender As Object, e As EventArgs)
        
        End Sub
      

  4.   

    估计是你datagrid的edit参数没有传够啊。你检查一下,把代码贴出来看看。
      

  5.   

    sub udg_edit(sender as object,e as datagridcommandeventargs)
            udg.edititemindex=cint(e.item.itemindex)
             bindgrid()
        
        
             end sub
      

  6.   

    <asp:datagrid id="udg" runat="server" oneditcommand="udg_edit" oncancelcommand="udg_cancel" onupdatecommand="udg_update"/>
         
      

  7.   

    comm.parameters.add(new sqlparameter("@username",SqlDbType.varChar,50))
             comm.parameters.add(new sqlparameter("@firstname",SqlDbType.NChar,50))
             comm.parameters.add(new sqlparameter("@lastname",SqlDbType.NChar,50))
             comm.parameters.add(new sqlparameter("@password",sqldbtype.varchar,50))
             comm.parameters.add(new sqlparameter("@userid",SqlDbType.NChar,4))好像都没有赋值啊。
      

  8.   

    myDataAdapter.SelectCommand.Parameters.Add("@CategoryName", SqlDbType.VarChar, 80).Value = "toasters";
      myDataAdapter.SelectCommand.Parameters.Add("@SerialNum", SqlDbType.Int).Value = 239;
      

  9.   

    同意楼上。没赋值语句当然是没提供参数了:)
    “.value=?”去哪了?
      

  10.   

    我是在界面中修改的,就是从界面中得到USERID,然后用参数@USERID,从界面中得到修改后的数据,有没有谁知道,帮帮忙
      

  11.   

    是不是可以用".VALUE=.TEXT",是不是啊,