最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
.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";
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";
相关文章
- 卡普空制作人亲自解释为什么里昂不是《生化危机9:安魂曲》主角! 07-02
- 教你用PS与LR打造日系清新男神艺术照 07-02
- 黑暗之魂2鼠王的试炼怎么打 07-02
- 资讯:三大交易所app下载 全球前三大加密货币交易所 07-02
- 美国运通美联储更新引发瑞波整合热议 07-02
- 火影忍者晓迪达拉怎么玩 07-02