1

ちょっと私はasp.netの使い方を学んでいて、グリッドビューを使って情報を表示し、詳細ビューでデータベースから情報を編集/削除しようとしています。現在、データベース内の情報を編集および更新できますが、削除したいのですが、何かがうまくいきません。例外を設定し、アイテムを選択して削除を押すと、別のユーザーがアイテムを削除していないのに削除したという例外がポップアップ表示されます。私が間違ったことをしたかどうかはよくわかりませんが、私にはうまくいくように見えます。

詳細ビューから削除コマンドとパラメーターのコードを次に示します。

      DeleteCommand="DELETE FROM [Customers]
     WHERE [CustomerID] = @original_CustomerID
      AND [Name] = @original_Name
       AND [Address] = @original_Address
        AND [City] = @original_City
         AND [State] = @original_State
          AND [ZipCode] = @original_ZipCode
           AND ([Phone] = @original_Phone 
            OR [Phone] IS NULL  AND @original_Phone IS NULL) 
           AND ([Email] = @original_Email 
           OR [Email] IS NULL AND @original_Email IS NULL)" 

<DeleteParameters>
        <asp:Parameter Name="original_CustomerID" Type="Int32" />
        <asp:Parameter Name="original_Name" Type="String" />
        <asp:Parameter Name="original_Address" Type="String" />
        <asp:Parameter Name="original_City" Type="String" />
        <asp:Parameter Name="original_State" Type="String" />
        <asp:Parameter Name="original_ZipCode" Type="String" />
        <asp:Parameter Name="original_Phone" Type="String" />
        <asp:Parameter Name="original_Email" Type="String" />
    </DeleteParameters>

csファイルの削除関数は次のとおりです

protected void DetailsView1_ItemDeleted(object sender, DetailsViewDeletedEventArgs e)
{
    if (e.Exception != null)
    {
        lblError.Text = "A database error has occurred.<br /><br />" +
            "Message: " + e.Exception.Message;
        e.ExceptionHandled = true;
    }
    else if (e.AffectedRows == 0)
        lblError.Text = "Another user may have deleted that customer."
            + "<br />Please try again.";
    else
        GridView1.DataBind();
}

protected void DetailsView1_ItemDeleting(
    object sender, DetailsViewDeleteEventArgs e)
{
    e.Values["Name"]
        = e.Values["Name"].ToString().Substring(1);
} 
4

1 に答える 1

0

なぜdeleteステートメントに対してこのような巨大なクエリがあるのですか?MSDNDetailsViewの例でそれがどのように行われるかを見てください

SQLテーブルのCustomerIDは一意である必要があるため、deleteステートメントは次のように単純にする必要があります。

DeleteCommand="DELETE FROM [Customers] WHERE [CustomerID] = @original_CustomerID"

そして、1つの削除パラメータのみ:

<DeleteParameters>
        <asp:Parameter Name="original_CustomerID" Type="Int32" />
</DeleteParameters>

非常に重要なもう1つのことは、削除する行がわかるDataKeyNames="CustomerID"ようにDetailsViewを設定する必要があることです。DetailsView1_ItemDeletedお役に立てれば!

于 2013-02-04T05:25:06.327 に答える