检查XML文件中的PK是否与数据库中的PK相似



使用C#.Net

我制作了一个程序,可以将SQL server数据库中的表导出为XML文件。然后,我将对XML文件进行更改,并将其导入数据库。

我目前正在开发的新程序将检查我的XML文件,并将其与DB上的同一个表进行比较。如果XML文件上的主键与DB上的主键相同,它将删除XML文件中的行,则具有不同PK的其余行将被导入。

我正在使用SqlBulkCopy将表从XML导入数据库。问题是,我不知道如何从XML中获取主键,并将其与DB上的主键进行比较。

示例XML结构:

<NewDataSet> 
    <Table>
      <DeviceId>1</DeviceId>
      <DeviceTypeId>1</DeviceTypeId>
      <Disabled>false</Disabled>
    </Table>
</NewDataSet>

假设一个XML结构为:

<NewDataSet> 
   <Table>
     <DeviceId>1</DeviceId>
     <DeviceTypeId>1</DeviceTypeId>
     <Disabled>false</Disabled>
   </Table>
</NewDataSet>

您可以使用一个简单的LINQ到XML查询从XML:中获取DeviceId(PK)

var id = (from n in xml.Root.Elements("Table")
          select n.Element("DeviceId").Value).SingleOrDefault();

返回:1

编辑*如果您的每个表都有不同的PK列名,则您需要重写该列名或为每个表编写特定的数据访问代码:

public static int GetTablePK(string identifier)
{
    return Convert.ToInt32((from n in xml.Root.Elements("Table")
          select n.Element(indentifier).Value).SingleOrDefault());
}

其中identifier是PK名称。这假设

表具有类似的XML结构

最新更新