2014-09-26 3 views
0

내 하드웨어 테이블의 다른 레코드에서 내 KitID를 참조하는 레코드를 삭제할 때 예외를 처리하려고합니다. SQL Server Express 데이터베이스에서 관계를 설정했습니다.외래 키 제약 조건에 대한 SQLException 처리

내가 수신하고 오류가

이 FK_Hardware_Kit "참조 제약 조건과 충돌 DELETE 문은"C "충돌 데이터베이스에서 발생했습니다."입니다 : \ 웹 사이트가 GEOQ \ APP_DATA \ ASPNETDB.MDF을 \ "테이블"DBO . 하드웨어 ", 컬럼 '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; 
      } 
     } 
    } 

} 

답변