C# sqldatasource update()不工作

C# sqldatasource update()不工作,c#,asp.net,sqldatasource,C#,Asp.net,Sqldatasource,我正在使用sqldatasource执行更新 我有一个事务表,它存储用户选择购买的单个项目(项目名称、项目价格、订单ID等) 我有一个Orders表,它存储订单的值(帐户名、订单总数等) 以下是我在.aspx页面中定义的SqlDataSource: <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:NH_SWAGC

我正在使用sqldatasource执行更新

我有一个事务表,它存储用户选择购买的单个项目(项目名称、项目价格、订单ID等)

我有一个Orders表,它存储订单的值(帐户名、订单总数等)

以下是我在.aspx页面中定义的SqlDataSource:

        <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
        ConnectionString="<%$ ConnectionStrings:NH_SWAGConnectionString %>" 

        InsertCommand="INSERT INTO [tblOrders] ([OrderDate], [OrderTotal], [OrderAccount], [OrderCostCentre]) VALUES (@OrderDate, @OrderTotal, @OrderAccount, @OrderCostCentre); SELECT @OrderNewID = SCOPE_IDENTITY()" 
        SelectCommand="SELECT * FROM [tblOrders]" 
        UpdateCommand="UPDATE [tblOrders] SET [OrderDate] = @OrderDate, [OrderTotal] = @OrderTotal, [OrderAccount] = @OrderAccount, [OrderCostCentre] = @OrderCostCentre WHERE [OrderID] = @original_OrderID AND [OrderDate] = @original_OrderDate AND [OrderTotal] = @original_OrderTotal AND [OrderAccount] = @original_OrderAccount AND [OrderCostCentre] = @original_OrderCostCentre" 
        OldValuesParameterFormatString="original_{0}" 

        oninserting="SqlDataSource2_Inserting"
        oninserted="SqlDataSource2_Inserted" onupdated="SqlDataSource2_Updated" 
        onupdating="SqlDataSource2_Updating">

        <InsertParameters>
            <asp:Parameter Direction="Output" Name="OrderNewId" Type="Int32" />
        </InsertParameters>
        <UpdateParameters>
            <asp:Parameter Name="OrderDate" Type="DateTime" />                                
            <asp:Parameter Name="OrderAccount" Type="String" />
            <asp:Parameter Name="OrderCostCentre" Type="String" />
            <asp:Parameter Name="original_OrderID" Type="Int32" />
            <asp:Parameter Name="original_OrderDate" Type="DateTime" />
            <asp:Parameter Name="original_OrderTotal" Type="Decimal" />
            <asp:Parameter Name="original_OrderAccount" Type="String" />
            <asp:Parameter Name="original_OrderCostCentre" Type="String" />
            <%--<asp:ControlParameter ControlID="lblOrderTotal" Name="OrderTotal" 
                PropertyName="Text" />--%>
        </UpdateParameters>
    </asp:SqlDataSource>
页面不会出错,但Orders数据库中对OrderTotal的更新不会更新。它保持在“0”。有人能帮我解释一下吗?我已经试了两天了。是的,这是我最后一次使用SqlDataSource——似乎每个人都推荐一种不同的方法(DAC?)——下一个项目我将遵循每个人的建议:)


谢谢大家

将OrderTotal添加到参数列表中,然后在更新之前以代码执行以下操作:

SqlDataSource2.UpdateParameters["OrderTotal"].DefaultValue = OrderTotal.ToString();
SqlDataSource2.Update();
使用DefaultValue属性将此值传递给查询

或者,点击更新事件,将新值添加到事件参数值集合中。这将被传递到后端


HTH.

好的,我不知道为什么它不会自动更新,但我只是在手动更新之前设置了updatecommand,这似乎起到了作用:

SqlDataSource2.UpdateCommand = "UPDATE tblOrders SET [OrderTotal] = " + (string)OrderTotal.ToString() + " WHERE OrderID = " + OrderNewID;
试试这个:

protected void SqlDataSource2_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
    e.Command.Parameters[0].Value = OrderTotal;
    e.Command.Parameters[1].Value = OrderNewId;
}

这对我来说很有效。

我以前尝试过(请参阅上面注释掉的代码),但我又尝试了一次://Update Order Table with Total of Order SqlDataSource2.UpdateParameters.Add(“OrderTotal”,(string)OrderTotal.ToString());SqlDataSource2.UpdateParameters[“OrderTotal”].DefaultValue=(字符串)OrderTotal.ToString();SqlDataSource2.Update()。。。不更新该值:(还尝试将参数添加到aspx文件,但仍然没有更新:好的,更新了上面的我的帖子。您也可以尝试更新事件,通过事件参数传递值。我仍然没有弄清楚这一点。SQL Server中的表列类型必须是什么才能起作用?您有办法跟踪@originalOrde吗更新发生前rID和@OrderTotal参数的值?
protected void SqlDataSource2_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
    e.Command.Parameters[0].Value = OrderTotal;
    e.Command.Parameters[1].Value = OrderNewId;
}