一聚教程网:一个值得你收藏的教程网站

热门教程

.Net中删除数据前进行外键冲突检测

时间:2022-07-02 11:26:47 编辑:袖梨 来源:一聚教程网

在编写数据库系统中为了保证系统中数据的一致性最简便且安全的方法就是在DBMS中建立外键约束,但删除主键数据时如果违反了外键约束,尽管DBMS会给出错误提示,如SQL Server的提示信息“%1! 语句与 %2! %3! 约束 '%4!' 冲突。该冲突发生于数据库 '%6!',表 '%8!'%10!%11!%13!。”,但这些提示信息对最终用户来说,是不友好的,于是就自己写了个类,用来删除记录时的进行外键冲突检测,代码如下:
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;
namespace DataAccess.SQLServerDAL
{
///
/// Check 的摘要说明。
///
public class Check
{
///
/// DBMS中保存系统表的
///
const string DEFAULT_SYSTABLES = "systables";
#region CkeckFKBeginDelete
///
/// 在删除记录之前先检测有无外键冲突
///
/// 事物对象
/// 要执行删除操作的表名
/// 要删除的记录的主键值
/// 返回错误信息
/// true - 无冲突,false - 有冲突
public bool CkeckFKBeginDelete(SqlTransaction trans, string tableName, string id, ref string errText)
{
string selectString; //SQL查询语句
string fkTableName; //外键表名称
string fkColumnName; //外键列名称
object obj; //执行SQL查询返回值
string description; //外键表含义
int count; //外键表中引用了主键的记录数
string[] tableNames = {"sysforeignkeys"};
DataSet ds = BuildDataTables();
//检索所有此表的外键表
selectString = "SELECT fkeyid, fkey FROM sysforeignkeys a, sysobjects b WHERE a.rkeyid = b.id AND b.name = @name";

热门栏目