sqldatasource update () не работает - PullRequest
1 голос
/ 12 апреля 2011

Я использую sqldatasource для обновления.

У меня есть таблица транзакций, в которой хранятся отдельные товары, которые пользователь выбирает для покупки (название товара, цена товара, orderID и т. Д.)

У меня есть таблица заказов, в которой хранятся значения для заказа (имя счета, общая сумма заказа и т. Д.)

Вот мой SqlDataSource, как определено на странице .aspx:

        <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 к текстовому полю. Я сделал это, потому что эта часть не работала. Затем я попытался изменить параметр в Code-Behind:

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

Страница не выдает ошибку, но обновление до OrderTotal в БД заказов не обновляется. Он остается на «0». Кто-нибудь может пролить свет на это для меня? Я пытался в течение 2 дней. И да, это последний раз, когда я буду использовать SqlDataSource - Кажется, все рекомендуют другой подход (DAC?) - В следующем проекте я буду следовать всем советам:)

Спасибо всем

Ответы [ 3 ]

2 голосов
/ 25 октября 2012

Попробуйте это:

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

Это сработало для меня.

0 голосов
/ 01 мая 2011

ОК, не знаю, почему оно не будет обновляться автоматически, но я установил команду update перед обновлением вручную, и это, похоже, сработало:

SqlDataSource2.UpdateCommand = "UPDATE tblOrders SET [OrderTotal] = " + (string)OrderTotal.ToString() + " WHERE OrderID = " + OrderNewID;
0 голосов
/ 12 апреля 2011

Добавьте OrderTotal в список параметров, а затем выполните код перед обновлением:

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

Использование свойства DefaultValue передает это значение в запрос.

Или нажмите на событие Updating и добавьте новое значение в коллекцию значений аргумента события. Это передается на сервер.

НТН.

...