.Net中删除数据前进行外键冲突检测
2005-06-07 09:41
281 查看
在编写数据库系统中为了保证系统中数据的一致性最简便且安全的方法就是在DBMS中建立外键约束,但删除主键数据时如果违反了外键约束,尽管DBMS会给出错误提示,如SQL Server的提示信息“%1! 语句与 %2! %3! 约束 '%4!' 冲突。该冲突发生于数据库 '%6!',表 '%8!'%10!%11!%13!。”,但这些提示信息对最终用户来说,是不友好的,于是就自己写了个类,用来删除记录时的进行外键冲突检测,代码如下:
1using System;
2using System.Data;
3using System.Data.SqlClient;
4using Microsoft.ApplicationBlocks.Data;
5
6namespace DataAccess.SQLServerDAL
7
使用该类时需要在DBMS中建一张系统表,并维护表中的数据,该表用来记录系统中各用户表的大概含义,用来告诉用户是什么地方发生了冲突:
create table sysTables(id int not null IDENTITY(1,1)
PRIMARY KEY CLUSTERED, /*ID*/
tableName varchar(255), /*用户表名称*/
description varchar(255) /*用户表描述*/)
调用示例:
public bool test()
//数据库连接字符串 string connectionString = "";
using (SqlConnection conn = new SqlConnection(connectionString))
conn.Open();
using (SqlTransaction trans = conn.BeginTransaction())
try
string execSqlString = "DELETE FROM Test WHERE id = 1";
string errText = "";
if (!new Check().CkeckFKBeginDelete(trans, "test", 1, ref errText))
trans.Rollback();
return false;
}
SqlHelper.ExecuteNonQuery(trans, CommandType.Text, execSqlString);
trans.Commit();
return true;
}
catch
trans.Rollback();
throw;
}
}
}
}
代码中用到ms的SqlHelper类,可以到http://msdn.microsoft.com/library/en-us/dnbda/html/daab-rm.asp下载。目前该类仅适用于SQL Server数据库
1using System;
2using System.Data;
3using System.Data.SqlClient;
4using Microsoft.ApplicationBlocks.Data;
5
6namespace DataAccess.SQLServerDAL
7
使用该类时需要在DBMS中建一张系统表,并维护表中的数据,该表用来记录系统中各用户表的大概含义,用来告诉用户是什么地方发生了冲突:
create table sysTables(id int not null IDENTITY(1,1)
PRIMARY KEY CLUSTERED, /*ID*/
tableName varchar(255), /*用户表名称*/
description varchar(255) /*用户表描述*/)
调用示例:
public bool test()
//数据库连接字符串 string connectionString = "";
using (SqlConnection conn = new SqlConnection(connectionString))
conn.Open();
using (SqlTransaction trans = conn.BeginTransaction())
try
string execSqlString = "DELETE FROM Test WHERE id = 1";
string errText = "";
if (!new Check().CkeckFKBeginDelete(trans, "test", 1, ref errText))
trans.Rollback();
return false;
}
SqlHelper.ExecuteNonQuery(trans, CommandType.Text, execSqlString);
trans.Commit();
return true;
}
catch
trans.Rollback();
throw;
}
}
}
}
代码中用到ms的SqlHelper类,可以到http://msdn.microsoft.com/library/en-us/dnbda/html/daab-rm.asp下载。目前该类仅适用于SQL Server数据库
相关文章推荐
- [转].Net中删除数据前进行外键冲突检测
- .Net中删除数据前进行外键冲突检测[转]
- .Net中删除数据前进行外键冲突检测
- .Net中删除数据前进行外键冲突检测
- 用db2 vs2005 .net插件进行xml数据验证
- SQL删除数据库里所有表的外键,同时删除所有用户表
- python 对excel 的数据进行删除操作
- .Net中使用散列算法对数据进行加密
- C#对DataGridView进行添加、修改、删除数据操作
- .Net下批量删除数据的存储过程问题(用动态SQL )
- JAVA对数据库进行操作,实现数据库中数据的插入,查询,更改,删除操作
- 通过CommandBuilder对DataSet数据进行添加、修改、删除
- MYSQL----对表中数据进行插入,更新,删除
- 主外键表关联数据的同时删除
- 使用重复数据删除进行灾难恢复和达到RTO
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- BOS元数据中不小心没有删除外键,升级后在查询分析器中手动删除表外键
- 使用临时表在list和reapter之间做数据的传递(双击view,数据进入到repeater中,点击reapter中的删除按钮进行删除)
- JDBC对数据进行插入,更新或者是删除之后得到修改或者插入的那条记录的主键值
- 数据库主外键,级联的保存、更新和删除