处理外键约束的SQLException

本文关键字:SQLException 约束 处理 | 更新日期: 2023-09-27 18:24:40

当我删除一条记录时,我正在尝试处理异常,其中我的KitID被硬件表中的其他记录引用。我已经在SQL Server Express数据库中设置了关系。

我收到的错误是

DELETE语句与REFERENCE约束"FK_Hardware_Kit"冲突。冲突发生在数据库"C:''WEBSITES''GEOQ''APP_DATA''ASPNETDB.MDF"表"dbo.Hardware"列"KitID"中。该语句已终止。

我希望收到那个错误,但我想知道为什么我处理错误的代码不起作用。

我在TRY和CATCH中设置了一些断点。当没有冲突时,SQL语句执行得很好,但当有冲突时,它根本不会进入catch块。

我觉得我错过了一些微不足道的事情。

代码:

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;
            }
        }
    }
}

处理外键约束的SQLException

您实际上并没有删除try部分中的记录。

OnItemDeleting在尝试删除记录之前触发。

您需要处理OnItemDeleted事件。

这里的文档向您展示了如何处理异常:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdeleted%28v=vs.110%29.aspx