-1

Order.aspx特定の注文を表示するページ ( ) があります。以下では、このページを ( )FileNoから呼び出します。Default.aspx

    LinkButton clickedButton = (LinkButton)sender;
    Session["FileNo"] = clickedButton.Text;
    Response.Redirect("~/Order.aspx");

この注文ページには、次の sqldatasource を持つ gridview コントロールがあります。以下の Datasource は正常に動作し、データベースを更新していましたが、突然、null FileNo でデータベースを更新し始めました。Session["FileNo"]いつクリアされるのかわかりません。リクエストされた追加のコードを提供できます。

<asp:SqlDataSource ID="sds_OrderDetail" OnSelected="sds_OrderDetail_Selected" runat="server"
    ConnectionString="<%$ ConnectionStrings:MyDbConn %>" DeleteCommand="DELETE FROM [OrderDetail] WHERE [RowNo] = @RowNo"
    InsertCommand="INSERT INTO [OrderDetail] ([FileNo], [PONumber], [MaterialCode], [MaterialDescription], [MaterialCategory], [UnitOfMeasure], [Quantity], [ContainerType], [LoadingDate]) VALUES (@FileNo, @PONumber, @MaterialCode, @MaterialDescription, @MaterialCategory, @UnitOfMeasure, @Quantity, @ContainerType, @LoadingDate)"
    SelectCommand="SELECT * FROM [OrderDetail] WHERE ([FileNo] = @FileNo)" UpdateCommand="UPDATE [OrderDetail] SET [FileNo] = @FileNo, [PONumber] = @PONumber, [MaterialCode] = @MaterialCode, [MaterialDescription] = @MaterialDescription, [MaterialCategory] = @MaterialCategory, [UnitOfMeasure] = @UnitOfMeasure, [Quantity] = @Quantity, [ContainerType] = @ContainerType, [LoadingDate] = @LoadingDate WHERE [RowNo] = @RowNo">
    <SelectParameters>
        <asp:SessionParameter DefaultValue="-1" Name="FileNo" SessionField="FileNo" Type="Int32" />
    </SelectParameters>
    <DeleteParameters>
        <asp:Parameter Name="RowNo" Type="Int32" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="FileNo" Type="Int32" />
        <asp:Parameter Name="PONumber" Type="String" />
        <asp:Parameter Name="MaterialCode" Type="String" />
        <asp:Parameter Name="MaterialDescription" Type="String" />
        <asp:Parameter Name="MaterialCategory" Type="String" />
        <asp:Parameter Name="UnitOfMeasure" Type="String" />
        <asp:Parameter Name="Quantity" Type="Int32" />
        <asp:Parameter Name="ContainerType" Type="String" />
        <asp:Parameter Name="LoadingDate" Type="String" />
    </InsertParameters>
    <UpdateParameters>
        <asp:Parameter Name="FileNo" Type="Int32" />
        <asp:Parameter Name="PONumber" Type="String" />
        <asp:Parameter Name="MaterialCode" Type="String" />
        <asp:Parameter Name="MaterialDescription" Type="String" />
        <asp:Parameter Name="MaterialCategory" Type="String" />
        <asp:Parameter Name="UnitOfMeasure" Type="String" />
        <asp:Parameter Name="Quantity" Type="Int32" />
        <asp:Parameter Name="ContainerType" Type="String" />
        <asp:Parameter Name="LoadingDate" Type="String" />
        <asp:Parameter Name="RowNo" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>
4

2 に答える 2

1

コードが突然動作を停止することはありません。それが機能しなくなった何か(たとえそれが非常に小さいものであっても)があるに違いありません。ここでは、問題がどこにあるかを把握するために試すことができるいくつかのことを示します。

  1. 前回動作していた後に変更したものをコメントアウトし、最小限の変更でコードのコメントを外し始めます。

  2. ソリューション全体で Session および Session["File"] のすべての出現を見つけ、すべての出現にブレークポイントを置き、アプリケーションをデバッグして、値が失われる場所を正確に確認します。

  3. FileNo を null にしたくない場合は、SQL のテーブル構造を変更し、null を許可しないようにします。検証のレイヤーを追加し、データベースに破損したデータがないことを確認します。結局のところ、それはデータが有効であることについてです。

于 2012-08-14T10:33:30.850 に答える
0

選択パラメーター以外のすべてのパラメーターには、SessionParameter として FileNo を含める必要があります。Session["FileNo"] はクリアされず、使用されませんでした。

于 2012-08-14T11:59:47.747 に答える