您的位置:首页 > 其它

.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数据库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: