ちょっと私は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);
}