处理外键约束的SQLException

时间:2014-09-26 02:15:52

标签: c# sql asp.net

当我删除我的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;
            }
        }
    }

}

1 个答案:

答案 0 :(得分:1)

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

在尝试删除记录之前,

OnItemDeleting触发。

您需要处理OnItemDeleted事件。

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