当我删除我的KitID被我的Hardware表中的其他记录引用的记录时,我正在尝试处理异常。我在SQL Server Express数据库中设置了关系。
我收到的错误是
“DELETE语句与REFERENCE约束冲突”FK_Hardware_Kit“。冲突发生在数据库”C:\ WEBSITES \ GEOQ \ APP_DATA \ ASPNETDB.MDF“,表”dbo.Hardware“,列'KitID'。已被终止。“
我希望收到该错误,但我想知道为什么处理错误的代码无效。
我在TRY和CATCH中设置了一些断点。当没有冲突时,SQL语句执行得很好,但是当存在冲突时,它根本不会进入catch块。
我觉得我错过了一些非常微不足道的事情。
CODE:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
public partial class Controls_Control_Admin_Kit : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void KitListView_OnItemDeleting(object sender, ListViewDeleteEventArgs e)
{
try
{
string deleteCommand = "DELETE FROM [Kit] WHERE [KitID] = @KitID";
SqlDataSource1.DeleteCommand = deleteCommand;
}
catch (SqlException SqlEx)
{
switch (SqlEx.Number)
{
case 547:
// Do something.
ErrorLabel.Text = "Error: There are hardware items associated with this Kit. <br />You must change the Kit field of each of the hardware items prior to deleting it. " + HttpUtility.UrlEncode("http://www.google.com/search?q=Kits") + " that require changing";
break;
default:
throw;
}
}
}
}
答案 0 :(得分:1)
您实际上并未删除try部分中的记录。
在尝试删除记录之前, OnItemDeleting
触发。
您需要处理OnItemDeleted
事件。
此处的文档向您展示了如何处理异常: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdeleted%28v=vs.110%29.aspx