我利用数据源在Gridview中绑定了几个字段,我想在点击编辑后,更改内容,同时数据库的字段内容也改变,但是我运行后报错:除非指定了 UpdateCommand,否则数据源“SqlDataSource1”不支持更新操作。 
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = new SqlConnection ("Server=.;user id=sa;password=;DataBase=Test2");
        cmd.CommandText = "update OrderDetails set 顾客ID=@CustomID where 订单ID=@OrderID";        SqlParameter prmCustomID = new SqlParameter("@CustomID", SqlDbType.NVarChar, 30);
        prmCustomID.Direction = ParameterDirection.Input;
        cmd.Parameters.Add(prmCustomID);        //SqlParameter prmStaffID = new SqlParameter("@StaffID", SqlDbType.NVarChar, 30);
        //prmStaffID.Direction = ParameterDirection.Input;
        //cmd.Parameters.Add(prmStaffID);        //SqlParameter prmOrderTime = new SqlParameter("@OrderTime", SqlDbType.NVarChar, 30);
        //prmOrderTime.Direction = ParameterDirection.Input;
        //cmd.Parameters.Add(prmOrderTime);        SqlParameter prmOrderID = new SqlParameter("@OrderID", SqlDbType.NVarChar, 30);
        prmOrderID.Direction = ParameterDirection.Input;
        cmd.Parameters.Add(prmOrderID);        prmCustomID.Value = GridView2.Rows[0].Cells[3].Text.ToString();
        //prmStaffID.Value = GridView2.Rows[0].Cells[4].Text.ToString();
        prmOrderID.Value = GridView2.Rows[0].Cells[1].Text;
        cmd.Connection.Open();
        //cmd.ExecuteNonQuery();
        cmd.Connection.Close();
        cmd.Connection.Dispose();
        cmd.Dispose();
      
        这个是我写的代码大家帮帮我,找哈看是哪里错了

解决方案 »

  1.   

    UpdateCommand你必须用到updatecommand="sql语句";
      

  2.   

    SqlDataSource1的UpdateCommand属性是否设定,没有UpdateCommand当然不能更新
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString=" <%$ ConnectionStrings:ConnectionString %>" 
            SelectCommand="" InsertCommand ="" UpdateCommand =""> </asp:SqlDataSource> 
      

  3.   

    你在页面上直接设置的GridView的DataSource为SqlDataSource1?
      

  4.   

    是的,直接设的数据源SqlDataSource1
      

  5.   

     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Test2ConnectionString2 %>"
                SelectCommand="SELECT [订单ID], [顾客ID], [员工ID], [订货日期], [数量] FROM [OrderDetails]" UpdateCommand ="Update OrderDetails SET 顾客ID=? WHERE 订单ID=@OrderID">
            </asp:SqlDataSource>
    第 1 行: '?' 附近有语法错误。UpdateCommand属性也设了, 这个错误我找不出!
      

  6.   

    不可以直接只用“?”,要用参数@XXX类似的
    使用SqlDataSource的向导,自动生成UpdateCommand,然后你自己再修改
      

  7.   

    它没有自动生成UpdateCommand,我也不知道为什么不自动生成
      

  8.   

    cmd.CommandText = "update OrderDetails set 顾客ID=@CustomID where 订单ID=@OrderID"; 
    楼主 写法有点重合
    其实 你可以不用写代码就可以编辑
    数据源配置好就可以啦!
    1:
    楼主的思路有点乱
    你绑定的时候 用的是数据源
    但是更新的时候其实可以直接利用数据源控件的(楼主应该去看看数据源控件的作用)
    但是楼主没有 而是选择自己写
     cmd.CommandText = "update OrderDetails set 顾客ID=@CustomID where 订单ID=@OrderID"; 
    gridview 里面设置datakeyNames 没有
    更新的话你没有必要prmOrderID.Value = GridView2.Rows[0].Cells[1].Text; 
    //这样给他赋值是错误的  prmOrderID.Value=GridView1.DatakeysName["OrderID"];
      

  9.   

    更新的话你没有必要prmOrderID.Value = GridView2.Rows[0].Cells[1].Text; 
    楼主应该明白 where 子句里面的值应该是老值
    但是你这样进入编辑状态后允许重新输入一个值
    所以是错误的