C# 如何仅检测上传文件中的更改?
如果我有一个C# 如何仅检测上传文件中的更改?,c#,asp.net,xml,file,crud,C#,Asp.net,Xml,File,Crud,如果我有一个xml文件(上传到我的服务器),我对它进行一些处理以从中获取数据,然后将这些数据存储在我的数据库中 如果用户进行了一些更改(插入、更新、删除),则再次将文件上载到我的服务器。是否有任何方法检测更改(插入、更新、删除)以根据更新我的数据库,而不仅仅是删除所有数据并再次插入。特别是,有些数据取决于现有数据(引用完整性),如果我删除所有数据,将删除从属数据。(级联删除) 注: 我存储文件哈希,因此我知道是否发生了一些更改 自从上次上传以来 正如Darin在评论中指出的,这在很大程度上取决
xml
文件(上传到我的服务器),我对它进行一些处理以从中获取数据,然后将这些数据存储在我的数据库中
如果用户进行了一些更改(插入、更新、删除),则再次将文件上载到我的服务器。是否有任何方法检测更改(插入、更新、删除)以根据更新我的数据库,而不仅仅是删除所有数据并再次插入。特别是,有些数据取决于现有数据(引用完整性),如果我删除所有数据,将删除从属数据。(级联删除)
注:
- 我存储文件哈希,因此我知道是否发生了一些更改 自从上次上传以来
- 正如Darin在评论中指出的,这在很大程度上取决于XML文件和数据库的结构和内容
原则上,当前删除一定数量表中的一组行,然后(重新)插入另一组行
如果您只想更新数据库,您可以-对于每个表-首先确定您当前要删除的所有行(即执行
SELECT…WHERE
而不是delete…WHERE
),准备一组要插入的行,并比较这两组行(称为delete和insert):
- 必须从数据库中删除仅在删除集中的行
- 必须插入仅在插入集中的行
- 必须更新INSERT和DELETE集合中的行
但如前所述,执行这些操作的方式和顺序取决于特定的数据结构。例如,如果表之间存在依赖关系(即父子关系),则父实体上的删除操作也必须处理子实体(可能在外键定义中使用delete CASCADE上的
子句)。在这种情况下,您还应该先处理父表,然后再处理其子表。正如Darin在他的评论中指出的,这在很大程度上取决于XML文件和数据库的结构和内容
原则上,当前删除一定数量表中的一组行,然后(重新)插入另一组行
如果您只想更新数据库,您可以-对于每个表-首先确定您当前要删除的所有行(即执行SELECT…WHERE
而不是delete…WHERE
),准备一组要插入的行,并比较这两组行(称为delete和insert):
- 必须从数据库中删除仅在删除集中的行
- 必须插入仅在插入集中的行
- 必须更新INSERT和DELETE集合中的行
但如前所述,执行这些操作的方式和顺序取决于特定的数据结构。例如,如果表之间存在依赖关系(即父子关系),则父实体上的删除操作也必须处理子实体(可能在外键定义中使用delete CASCADE上的子句)。在这种情况下,您还应该先处理父表,然后再处理其子表。上载此XML文件后,您将如何处理它?你在分析它吗?如何将数据存储到数据库中?XML文件的结构是什么?你的数据库的结构是什么?在您的问题成为可回答问题之前,需要回答的许多问题。是的,我解析数据并将其存储在数据库中。我使用xmlreader
读取每个元素的属性,然后存储在数据库中的等效实体中。答案反映了您问题的详细程度:是,有一种方法可以检测更改。然后请提供一个详细的答案:)上传此XML文件后,您将如何处理它?你在分析它吗?如何将数据存储到数据库中?XML文件的结构是什么?你的数据库的结构是什么?在您的问题成为可回答问题之前,需要回答的许多问题。是的,我解析数据并将其存储在数据库中。我使用xmlreader
读取每个元素的属性,然后存储在数据库中的等效实体中。答案反映了您问题的详细程度:是,有一种方法可以检测更改。然后请提供详细答案:)选择。。。其中
我的表和xml文件之间的比较标准是什么。这取决于您;)您需要能够识别数据库中XML中的数据,即必须为XML文件和数据库定义某种主键。此主键可能是什么取决于您的数据:如果您插入例如个人数据,您可能会使用名字和姓氏的组合。然后你可以做一个从persons中选择forename+''+surename
并将其与XML文件中相同的forename/姓氏组合进行比较。选择。。。其中
我的表和xml文件之间的比较标准是什么。这取决于您;)您需要能够识别数据库中XML中的数据,即必须为XML文件和数据库定义某种主键。此主键可能是什么取决于您的数据:如果您插入例如个人数据,您可能会使用名字和姓氏的组合。然后你可以做一个从persons中选择forename+''+surename
并将其与XML文件中相同的forename/姓氏组合进行比较。