Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅检测上传文件中的更改?_C#_Asp.net_Xml_File_Crud - Fatal编程技术网

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/姓氏组合进行比较。