【问题标题】:sqldatasource update() not workingsqldatasource更新()不起作用
【发布时间】:2011-04-12 16:05:06
【问题描述】:

我正在使用 sqldatasource 执行更新。

我有一个 Transactions 表,用于存储用户选择购买的单个商品(商品名称、商品价格、订单 ID 等)

我有一个订单表,其中存储订单的值(帐户名称、订单总额等)

这是我在 .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>

您可以看到我屏蔽了将 OrderID 附加到文本框的代码。我这样做是因为那部分不起作用。然后我尝试修改代码隐藏中的参数:

        //Update Order Table with Total of Order
    //SqlDataSource2.UpdateParameters["OrderTotal"].DefaultValue = (string)OrderTotal.ToString();        
    SqlDataSource2.UpdateParameters.Add("OrderTotal", (string)OrderTotal.ToString());
    SqlDataSource2.Update();

页面没有出错,但 Orders Db 中 OrderTotal 的更新没有更新。它保持在“0”。任何人都可以为我阐明这一点吗?我已经尝试了2天了。是的,这是我最后一次使用 SqlDataSource - 似乎每个人都推荐不同的方法(DAC?) - 下一个项目我将遵循每个人的建议 :)

谢谢大家

【问题讨论】:

    标签: c# asp.net sqldatasource


    【解决方案1】:

    试试这个:

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

    它对我有用。

    【讨论】:

      【解决方案2】:

      将OrderTotal添加到参数列表中,然后在更新前的代码中做:

      SqlDataSource2.UpdateParameters["OrderTotal"].DefaultValue = OrderTotal.ToString();
      SqlDataSource2.Update();
      

      使用 DefaultValue 属性将此值传递给查询。

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

      HTH。

      【讨论】:

      • 我之前尝试过(请参阅上面注释掉的代码),但我再次尝试: //Update Order Table with Total of Order SqlDataSource2.UpdateParameters.Add("OrderTotal", (string)OrderTotal .ToString()); SqlDataSource2.UpdateParameters["OrderTotal"].DefaultValue = (string)OrderTotal.ToString(); SqlDataSource2.Update(); ...不更新值:(
      • 还尝试将参数添加到 aspx 文件中,但仍然没有更新:
      • 好的,更新了我上面的帖子。您也可以尝试更新事件,通过事件 arg 传递值。
      • 我还没有弄明白。表的列类型必须在 SQL Server 中才能正常工作?你有办法在更新发生之前跟踪@originalOrderID 和@OrderTotal 参数的值吗?
      【解决方案3】:

      好的,不知道为什么它不会自动更新,但我只是在手动更新之前设置了更新命令,这似乎奏效了:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 2019-02-11
        相关资源
        最近更新 更多