2013-04-12 2 views
4

У меня есть table_Project с идентификатором CustomerID (связанный с tbl_Customer). В tbl_Customer у меня есть Customer_ID (в качестве ключа) и какой-либо другой информации, как телефон, электронная почта и т.д.Операция DELETE противоречит REFERENCE

Чтобы удалить его из Gridview Я использую этот DeleteCommand:

DeleteCommand="DELETE FROM [tbl_Customer] WHERE [Customer_ID] = @Customer_ID" 

Но это дает мне следующую ошибку:

The DELETE statement conflicted with the REFERENCE constraint "Klant_Relatie". The conflict occurred in database "Database_1", table "dbo.tbl_Project", column 'CustomerID'. The statement has been terminated.

Но с обновлением CustomerInfo У меня нет ошибок. Я видел различные решения для C#, но я использую .net

Любые идеи?

+0

ВЫ ИМЕЕТЕ ПЕРВОЕ УДАЛИТЬ ВСЕ ЕДИНИЦЫ, ОТНОСЯЩИЕСЯ К table_Project С ИМЯ ИСПЫТАНИЯ КЛИЕНТА, КАК ЭТО БУДЕТ ИМЕТЬ ИНОСТРАННОЕ КЛЮЧЕВОЕ ОТНОШЕНИЕ К tbl_Customer –

+0

У вас есть попытка удалить на каскаде ???? – SenthilPrabhu

ответ

4

Ваша проблема имеет что-то делать с ссылочной целостности. Вы не можете удалить запись (из таблицы tbl_Customer), на которую в настоящее время ссылаются некоторые записи в определенной таблице (таблица table_Project, например). UPDATE отличается от DELETE, если вы не обновляете ключ, в вашем случае CustomerID. UPDATE изменяет запись, а DELETE удаляет запись.

Взгляните на этот пример,

tbl_Customer стол

CustomerID CustomerName 
1   Hello 
2   World 

table_Project стол

CustomerID ProjectName 
1   Webscripting 
1   Database Maintenance 

Вы всегда можете сделать все, что вы хотите на запись 2 таблицы tbl_customer потому что нет записи t шляпа ссылается на него. Но в записи 1 вы не можете удалить ее, если две записи из таблицы table_Project не удалены. Вы можете изменить столбец CustomerName, но не CustomerID, если все еще ссылаются.

4

Вы не можете удалить клиента, если он ссылается на проект .. Вот что значит ошибка ..

Я не понимаю вашего

I have seen different solutions for C# but I use .net

Но у вас есть различные решения здесь:

  1. Изменение клиента ссылаются все проекты, связанные с старым (тот, что хотите удалить)
  2. падения ограничений (Не мя у хороший вариант)
  3. Удаление проекта перед удалением клиента (вручную или с помощью каскадного удаления)
2

Еще одна вещь, которую вы могли бы сделать, - это заменить SQL-ключ на SQL-сервер, чтобы он удалял его каскадом. Это приведет к удалению записей вниз. Поэтому, если вы удалите запись в таблице a, любая запись в таблице b, которая ссылается на эту запись, также будет удалена.

Смежные вопросы