帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:DEL  


介绍

通常情况下,在删除数据库中的记录时需要对所有相关记录执行一些操作: 删除相关记录,将它的重新分配给其他记录( 更改外键),或者删除有关关系( 空外键)的信息。

例如假设你有一个雇员表和一个缺陷表,员工表中的雇员的一个记录将被删除。 如何处理分配给该员工的所有缺陷是一个两难的问题: 删除,保留它们给任何雇员,或者分配给其他员工? 这个问题会变得更加困难,如果存在许多多级关系。

下面描述的机制将允许你处理这个问题,提供的源将帮助你检索这些相关记录。

提出的方案方案来解决这个问题

  • 用户要求删除某个记录。
  • 将数据库中的所有相关记录( id和外键) 检索到 DataSet 。 上面提到的示例将从员工表中删除一个记录,并从缺陷表中删除所有相关记录。
  • 如果有相关的记录,则评估检索到的DataSet 。 应用程序可能会通知用户相关的记录,并限制删除。 或者要求批准删除相关记录,或者更改这些记录的外键。
  • 保存对数据库的更改。

详情

用户要求删除某些记录

更好地锁定记录以进行编辑,只有一个用户可以以使用它。

注意:本文中没有讨论锁定记录主题。 以及其他不允许用户在这里操作期间修改或者添加记录的解决方案。

检索所有相关记录

检索所有相关记录( id和主键) 以决定并对这些记录执行特定操作。 为此,有一个实用函数。 它返回与给定表相关的不同表的相关记录- 记录。 你可以在 DBDeleteHelper的类中找到它,在名称空间 MohawkIDEAS.Utils

public DataSet GetRelatedTables(SqlConnection con, 
 string strTableName, string strFieldName, int iID);
  • con - 活动连接。
  • strTableName - 记录所属的表名称。
  • strFieldName - 主字段名称。
  • iID - 要检索相关记录的记录 ID 。

表按这样的方式排列:首先是最小的相关表( 枫叶) 。 最后进入主表。 这些表按如下所示排列:

因此,如果要删除具有 ID 12的雇员,请调用该函数:

DataSet _ds=GetRelatedTables(con, "employees","ID",12);

评估检索到的数据集

检索 DataSet 之后,你可以检查是否有相关的记录。 例如你可以检查是否存在相关的缺陷。

If (_ds.Tables["Defects"].Rows.Count>0 )
{
...
}

如果有相关记录,则以下选项为:

  • 可以通知用户,由于存在相关记录,无法删除选定的记录,并取消删除。
  • 所有相关记录也可以标记为删除:
    foreach (System.Data.DataRow _row in _ds.Tables["Defects"].Rows)
    {
     _row.Delete();
    }
  • 相关记录可以通过更改外部 key-value 来更新( 指派给其他员工):
    int _iID;
    _iID = ChooseNewResposibleEmploee();foreach (System.Data.DataRow _row in _ds.Tables["Defects"].Rows)
    {
     _row["EmployeeID"]= _iID; //Another Employee id}

保存对数据库的更改

如果未取消删除,则应发送更新的DataSet 以进行更新:

DataAdapter.Update(_ds);


文章标签:DEL  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语